http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59303
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Created attachment 31496 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31496&action=edit cleanups I had also a brief look at this recently, but haven't made progress beyond attached formatting/cleanup patch so far (plus only dumping details with *-details, otherwise the dumps are pretty much inconsistent). My conclusion has also been that to fix this up the predicates would need to be normalized before comparison, and simplified, at least if the initial subset check fails. On uninit-pred-8_b.c there has been additional complication because PRE decides to change the IL and we end up with: <bb 3>: pretmp_24 = r_10(D) <= 19; goto <bb 5>; <bb 4>: _11 = r_10(D) <= 19; _13 = l_12(D) != 0; _14 = _11 | _13; if (_14 != 0) goto <bb 14>; else goto <bb 15>; <bb 14>: goto <bb 3>; <bb 15>: <bb 5>: # v_1 = PHI <v_15(D)(15), r_10(D)(3)> # prephitmp_30 = PHI <0(15), pretmp_24(3)> if (m_7(D) != 0) goto <bb 6>; else goto <bb 7>; <bb 6>: g.0_17 = g; g.1_18 = g.0_17 + 1; g = g.1_18; goto <bb 8>; <bb 7>: bar (); <bb 8>: _3 = prephitmp_30 | _9; if (_3 != 0) so the prephitmp_30 would need to be canonicalized into _14 != 0 && r_10(D) <= 19 aka (r_10(D) <= 19 || l_12(D) != 0) && r_10(D) <= 19 and from there to r_10(D) <= 19.