OSDN Git Service

2011-11-22 Tom de Vries <tom@codesourcery.com>
authorvries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Nov 2011 20:55:01 +0000 (20:55 +0000)
committervries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Nov 2011 20:55:01 +0000 (20:55 +0000)
PR rtl-optimization/50764
* sched-deps.c (sched_analyze_insn): Make sure frame-related insns are
not moved past preceding jump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181639 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/sched-deps.c

index df93891..4c7eca4 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-22  Tom de Vries  <tom@codesourcery.com>
+
+       PR rtl-optimization/50764
+       * sched-deps.c (sched_analyze_insn): Make sure frame-related insns are
+       not moved past preceding jump.
+
 2011-11-22  Jeff Law  <law@redhat.com>
 
        * doc/contrib.texi: Add entry for David Binderman.
index a778721..043204a 100644 (file)
@@ -2812,8 +2812,14 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx insn)
      during prologue generation and avoid marking the frame pointer setup
      as frame-related at all.  */
   if (RTX_FRAME_RELATED_P (insn))
-    deps->sched_before_next_jump
-      = alloc_INSN_LIST (insn, deps->sched_before_next_jump);
+    {
+      /* Make sure prologue insn is scheduled before next jump.  */
+      deps->sched_before_next_jump
+       = alloc_INSN_LIST (insn, deps->sched_before_next_jump);
+
+      /* Make sure epilogue insn is scheduled after preceding jumps.  */
+      add_dependence_list (insn, deps->pending_jump_insns, 1, REG_DEP_ANTI);
+    }
 
   if (code == COND_EXEC)
     {