https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=677681 can be “fixed” by disabling the artificial dependency of a debug insn on its previous insn.
Debug insns will often depend on their prevs anyway, in a use/def relationship, but if the def was (re)moved or the use was reset, this artificial dep helped keep the debug insn “in place”. Being a very imperfect heuristic, it's not clear that it helps more than it harms. Thoughts? Regstrapped on x86_64-linux-gnu and i686-linux-gnu.
for gcc/ChangeLog from Alexandre Oliva <aol...@redhat.com> * sched-deps.c (sched_analyze_insn): Don't force debug insns to follow their original predecessors. Index: gcc/sched-deps.c =================================================================== --- gcc/sched-deps.c.orig 2011-02-24 09:54:12.016654388 -0300 +++ gcc/sched-deps.c 2011-02-24 09:55:48.456918435 -0300 @@ -2816,7 +2816,7 @@ sched_analyze_insn (struct deps_desc *de additional analysis can modify the generated code. */ prev = PREV_INSN (insn); - - if (prev && NONDEBUG_INSN_P (prev)) - add_dependence (insn, prev, REG_DEP_ANTI); } else
-- Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist Red Hat Brazil Compiler Engineer