/* { dg-do compile } */ /* { dg-options "-O3" } */ /* The pseudo for P is marked as moveable in the IRA pass. */ float func_0 (float a, float b, float c) { float p = c / a; if (b > 1) { b /= p; if (c > 2) a /= 3; } return b / c * a; } /* If first_moveable_pseudo and last_moveable_pseudo are not reset correctly, they will carry over and spill the pseudo for Q. */ float func_1 (float a, float b, float c) { float q = a + b; c *= a / (b + b); if (a > 0) c *= q; return a * b * c; } /* We have plenty of spare registers, so check nothing has been spilled. */ /* { dg-final { scan-assembler-not "\tstr\t" } } */