https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71433
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- Before VRP we have # r_3 = PHI <1(2)> if (e_14(D) < -52) goto <bb 6>; else goto <bb 7>; <bb 4>: # r_7 = PHI <r_13(D)(2)> if (e_14(D) < -52) goto <bb 5>; else goto <bb 7>; <bb 5>: if (r_7 == 0) goto <bb 12>; else goto <bb 6>; <bb 6>: goto <bb 12>; <bb 7>: _1 = e_14(D) < 0; _2 = (long int) _1; if (e_14(D) < 0) so _maybe_ the fix is to go over the pending asserts we want to insert and see if we want to insert the same one on all predecessors of a block and then simply merge them, inserting them into the block (BB 7) itself. I think that should be reasonably easy to do.