/* PR rtl-optimization/20290 */ /* We used to mis-optimize the second loop in main on at least ppc and arm, because tree loop would change the loop to something like: ivtmp.65 = &l[i]; ivtmp.16 = 113; goto (); :; *(ivtmp.65 + 4294967292B) = 9; i = i + 1; :; ivtmp.16 = ivtmp.16 - 1; ivtmp.65 = ivtmp.65 + 4B; if (ivtmp.16 != 0) goto ; We used to consider the increment of i as executed in every iteration, so we'd miscompute the final value. */ extern void abort (void); void check (unsigned int *l) { int i; for (i = 0; i < 288; i++) if (l[i] != 7 + (i < 256 || i >= 280) + (i >= 144 && i < 256)) abort (); } int main (void) { int i; unsigned int l[288]; for (i = 0; i < 144; i++) l[i] = 8; for (; i < 256; i++) l[i] = 9; for (; i < 280; i++) l[i] = 7; for (; i < 288; i++) l[i] = 8; check (l); return 0; }