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.

Reply via email to