1  /* { dg-do compile } */
       2  /* { dg-options "-O3" } */
       3  
       4  /* The pseudo for P is marked as moveable in the IRA pass. */
       5  float
       6  func_0 (float a, float b, float c)
       7  {
       8    float p = c / a;
       9  
      10    if (b > 1)
      11      {
      12        b /= p;
      13        if (c > 2)
      14          a /= 3;
      15      }
      16  
      17    return b / c * a;
      18  }
      19  
      20  /* If first_moveable_pseudo and last_moveable_pseudo are not reset correctly,
      21     they will carry over and spill the pseudo for Q. */
      22  float
      23  func_1 (float a, float b, float c)
      24  {
      25    float q = a + b;
      26  
      27    c *= a / (b + b);
      28    if (a > 0)
      29      c *= q;
      30  
      31    return a * b * c;
      32  }
      33  
      34  /* We have plenty of spare registers, so check nothing has been spilled. */
      35  /* { dg-final { scan-assembler-not "\tstr\t" } } */