https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109088
--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> --- Ah, so this is for int foo (int *a, int x) { int sum = 0; for (int i = 0; i < 1024; ++i) if (a[i] < 10) sum = sum + a[i] + x; return sum; } transforming it to int foo (int *a, int x) { int sum = 0; for (int i = 0; i < 1024; ++i) { tem = a[i] + x; if (a[i] < 10) sum = sum + tem; } return sum; } note this is re-associating and thus not always valid. It also executes stmts unconditionally (also not always valid, for FP spurious exceptions might be raised).