https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126999

--- Comment #1 from Andrew Macleod <amacleod at redhat dot com> ---
When processing builtin_unreachable the final time in VRP2, we maintain a list
of blocks which form the Connections on the false side of the unreachable
expression,. so we can be sure all uses of an ssa-name are dominated before
rewriting their global value..

In this case, I see:
Removing dead stmt:g22_lsm_flag.12_3 = PHI <1(3)>
Removing dead stmt:c10_9 = PHI <1(13)>
Removing dead stmt:g22_lsm_flag.12_22 = PHI <1(19), 1(18)>
Removing dead stmt:c10_23 = PHI <1(10), 1(9), 1(3)>
Removing dead stmt:fp5_25 = PHI <f3(3)>
Removing dead stmt:fp5_27 = PHI <f3(8)>
Removing dead stmt:g22_lsm_flag.12_29 = PHI <1(8)>
Removing dead stmt:fp5_38 = PHI <f3(19), f3(18)>
Removing dead stmt:fp5_39 = PHI <f3(17)>
Removing dead stmt:g22_lsm.11_42 = PHI <0(8)>
Removing dead stmt:g22_lsm.11_43 = PHI <0(19), 0(18)>
Fixing up noreturn call f3 ();

So one of the blocks has a no-return fixup, which splits a block during
substitute_and_fold, and now the block pairs stashed away no longer has an edge
between them ..  

IM not sure whey the edge itself isn't being stashed away.. that is one option.
This is all within VRP before it runs DCE and it wasn't expecting a CFG
change...

Reply via email to