------- Comment #9 from rguenth at gcc dot gnu dot org  2010-03-21 23:07 -------
(In reply to comment #8)
> (In reply to comment #7)
> > The problem is that copyprop does this change:
> > 
> > @@ -25,7 +25,7 @@
> >    <bb 12>:
> >      # .MEM_16 = PHI <.MEM_18(10), .MEM_20(11)>
> >      # s_66 = PHI <s_1(10), s_1(11)>
> > -    s_13 = s_66;
> > +    s_13 = s_1;
> >      goto <bb 16> (got_it);
> > 
> >    }
> > 
> > then verify_loop_closed_ssa () complains about the fact that s_1 is
> > defined in loop_1 and used outside loop_1 in a non close-phi node.
> 
> Ah, copyprop avoids _single_ arg PHIs because that may break loop-closed
> SSA form.  Why does loop closed SSA form suddenly have double-arg
> loop-closed PHI nodes?
> 
> Indeed Sebastians patch is a non-suitable hammer.  Copyprop already tries
> to avoid breaking loop-closed SSA form.

              /* In loop-closed SSA form do not copy-propagate through
                 PHI nodes.  Technically this is only needed for loop
                 exit PHIs, but this is difficult to query.  */
              || (current_loops
                  && gimple_phi_num_args (phi) == 1
                  && loops_state_satisfies_p (LOOP_CLOSED_SSA)))

Thus it seems that && gimple_phi_num_args (phi) == 1 should be removed.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43464

Reply via email to