https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77283
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #39469|0 |1 is obsolete| | --- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> --- Created attachment 40508 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40508&action=edit updated patch Well, updated patch avoids to regress existing testcases (where they make sense). But it doesn't fix the s390 testcase (added as split-path-9.c) given we have <bb 4> [85.00%]: # i_15 = PHI <i_11(8), 0(3)> # prephitmp_19 = PHI <prephitmp_17(8), pretmp_18(3)> _2 = prephitmp_19 & 1; if (_2 != 0) goto <bb 5>; [50.00%] else goto <bb 6>; [50.00%] <bb 5> [42.50%]: _3 = prephitmp_19 ^ 1; *state_9(D) = _3; <bb 6> [85.00%]: # prephitmp_17 = PHI <prephitmp_19(4), _3(5)> i_11 = i_15 + 1; if (i_11 != size_8(D)) goto <bb 8>; [85.00%] else goto <bb 7>; [15.00%] <bb 8> [72.25%]: goto <bb 4>; [100.00%] where clearly threading is possible (and wanted). Unfortunately we do a pretty bad job as followup (for whatever reason). We fail to transform this to an early exit of the loop. Jump threading fails to thread away the & 1 check as well.