[Bug tree-optimization/56756] [4.9 Regression] ICE: verify_ssa failed (definition in block n follows the use !)

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 16 11:56:00 GMT 2013


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.



More information about the Gcc-bugs mailing list