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.