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.