https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114589
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Blocks| |85316 --- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- So when doing the sinking it's too late since there's no VRP between early sinking and late unrolling and also threadfull doesn't figure out <bb 3> [local count: 105119324]: _11 = &o_3(D)->val; _12 = 1; _13 = 4; _10 = _11 + 4; ivtmp.11_14 = (unsigned long) _11; <bb 4> [local count: 955630224]: # ivtmp.11_17 = PHI <ivtmp.11_2(6), ivtmp.11_14(3)> _18 = (void *) ivtmp.11_17; i_6 = MEM[(const int *)_18]; f (i_6); ivtmp.11_2 = ivtmp.11_17 + 4; __for_begin_19 = (const int *) ivtmp.11_2; if (__for_begin_19 != _10) goto <bb 6>; [89.00%] else goto <bb 5>; [11.00%] <bb 6> [local count: 850510900]: goto <bb 4>; [100.00%] but IIRC it doesn't consider the loop entry "fallthru" as "threading" source. Nevertheless I have a fix for the sinking issue. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85316 [Bug 85316] [meta-bug] VRP range propagation missed cases