]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
haifa-sched.c (schedule_block): If the first real insn in a block has any special...
authorJeffrey A Law <law@cygnus.com>
Tue, 7 Oct 1997 15:52:32 +0000 (15:52 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 7 Oct 1997 15:52:32 +0000 (09:52 -0600)
        * haifa-sched.c (schedule_block): If the first real insn in a
        block has any special notes attached to it, remove them.
Fixes bug reported by Weiwen Liu.

From-SVN: r15853

gcc/ChangeLog
gcc/haifa-sched.c

index 938bf5669b0ec469a7498b175248f11ecb0fb3dd..edb1de021d8f19f5f4ed0a9e0a614cf375625802 100644 (file)
@@ -1,3 +1,8 @@
+Tue Oct  7 09:54:35 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * haifa-sched.c (schedule_block): If the first real insn in a
+       block has any special notes attached to it, remove them.
+
 Tue Oct  7 09:48:51 1997  Richard Henderson  <rth@cygnus.com>
 
        * alpha.h (FLOAT_STORE_FLAG_VALUE): It's 2.0 not 0.5.
index 36f3c92225d4bc7b28d544784dc9cc856a894c18..a88b8c4a84ff49c3c3454403b1522306e77bd549 100644 (file)
@@ -6601,6 +6601,25 @@ schedule_block (bb, rgn, rgn_n_insns)
      had different notions of what the "head" insn was.  */
   get_block_head_tail (bb, &head, &tail);
 
+  /* Interblock scheduling could have moved the original head insn from this
+     block into a proceeding block.  This may also cause schedule_block and
+     compute_forward_dependences to have different notions of what the
+     "head" insn was.
+
+     If the interblock movement happened to make this block start with
+     some notes (LOOP, EH or SETJMP) before the first real insn, then
+     HEAD will have various special notes attached to it which must be
+     removed so that we don't end up with extra copies of the notes.  */
+  if (GET_RTX_CLASS (GET_CODE (head)) == 'i')
+    {
+      rtx note;
+
+      for (note = REG_NOTES (head); note; note = XEXP (note, 1))
+       if (REG_NOTE_KIND (note) == REG_DEAD
+           && GET_CODE (XEXP (note, 0)) == CONST_INT)
+         remove_note (head, note);
+    }
+
   next_tail = NEXT_INSN (tail);
   prev_head = PREV_INSN (head);