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



--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> 2013-04-16 
11:56:26 UTC ---

The issue is that



static void

execute_sm (struct loop *loop, vec<edge> exits, mem_ref_p ref)

{

...

  /* Emit the load code into the latch, so that we are sure it will

     be processed after all dependencies.  */

  latch_edge = loop_latch_edge (loop);



is no longer working.  It wasn't working by design before either.

We temporarily create



    <header> <-----------\

       |                 |

      if ()              |

     /   \               |

         _17 = *q_8(D);  |

     \   /               |

     D__lsm.5 = *_17;-----



that is invalid SSA form and expect a dominator walk to visit

_17 = *q_8(D) before visiting D__lsm.5 = *_17;



So a simpler fix than the attached one finds a better temporary

insertion place for D__lsm.5 =  *_17;



Placing the load at a random existing load or store would be the

best.  I'm reworking the patch to do that.

Reply via email to