https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37810
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2009-04-03 12:34:44 |2021-7-25 --- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- For the reduced testcase in comment #2 I get now: 4.8.0+: .L4: addl $1, %eax movl %eax, (%rbx) cmpl 4(%rbx), %eax je .L8 .L3: testl %eax, %eax jne .L4 4.7.4 and before: .L3: testl %eax, %eax je .L8 addl $1, %eax cmpl 4(%rbx), %eax movl %eax, (%rbx) jne .L3 Or on the trunk at the gimple level: <bb 3> [local count: 1014686025]: _1 = prephitmp_10 + 1; iter_6(D)->n = _1; _2 = iter_6(D)->m; if (_1 == _2) goto <bb 4>; [5.50%] else goto <bb 6>; [94.50%] <bb 4> [local count: 55807731]: g (); <bb 5> [local count: 114863530]: pretmp_11 = iter_6(D)->n; <bb 6> [local count: 1073741824]: # prephitmp_10 = PHI <pretmp_11(5), _1(3)> if (prephitmp_10 != 0) goto <bb 3>; [94.50%] else goto <bb 7>; [5.50%] Aka the store still happens inside the loop unconditionally.