https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103596
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the issue is that we value number
_3(ab) = -1;
switch (_3(ab))
{
}
in a way to determine the known executable edge but later do not force
propagation into the switch and may_propagate_copy disallows propagating
into the abnormal SSA name. This is because of
/* Similarly if DEST flows in from an abnormal edge then the copy cannot be
propagated. */
else if (TREE_CODE (dest) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest))
return false;
which is overly restrictive if the propagation does not happen into a PHI
argument on an abnormal edge.
Testing a fix.