https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111563
--- Comment #5 from Yi <652023330028 at smail dot nju.edu.cn> --- (In reply to Andrew Pinski from comment #3) > So this is again reassociation with LIM, the same issue as PR 111560. For this similar code, GCC works as expected: https://godbolt.org/z/3TaqfeTqb ```c++ extern int var_24; int t; void test(int var_2, int var_3, int var_8, int var_10, int var_14) { for (int i_2 = -3247424; i_2 < 19; i_2 += var_3 + 1056714155) { var_24 += (-(200 / var_10)) + (-var_8); var_24 += var_14 + var_2; i_2+=i_2/3; } } ``` So it seems that this and PR 111560 may not be due to the same cause. Because it doesn't seem to be relevant to the statement, "Our re-association only produces a canonical order within a single expression." Meanwhile, in Example 2, 'if(var_3)' is actually optimized out of the Loop by Loop Unswitch. So maybe the rest of the loop should be optimized as expected like this similar code?