reorg.c (emit_delay_sequence): Call set_new_first_and_last_insn after the new sequenc...
authorJeff Law <law@gcc.gnu.org>
Thu, 12 Jun 1997 15:45:32 +0000 (09:45 -0600)
committerJeff Law <law@gcc.gnu.org>
Thu, 12 Jun 1997 15:45:32 +0000 (09:45 -0600)
        * reorg.c (emit_delay_sequence): Call set_new_first_and_last_insn
        after the new sequence insn has been spliced into the insn chain.

From-SVN: r14229

gcc/reorg.c

index 3a5a7e94460a8cb45ba91ca9ea070a58f5d2244c..5f24cfc200c6e19e30d32fec0dd5d5021adcabc5 100644 (file)
@@ -894,15 +894,22 @@ emit_delay_sequence (insn, list, length, avail)
   NEXT_INSN (seq_insn) = NEXT_INSN (insn);
   PREV_INSN (seq_insn) = PREV_INSN (insn);
 
+  if (insn != last)
+    PREV_INSN (NEXT_INSN (seq_insn)) = seq_insn;
+
+  if (insn != first)
+    NEXT_INSN (PREV_INSN (seq_insn)) = seq_insn;
+
+  /* Note the calls to set_new_first_and_last_insn must occur after
+     SEQ_INSN has been completely spliced into the insn stream.
+
+     Otherwise CUR_INSN_UID will get set to an incorrect value because
+     set_new_first_and_last_insn will not find SEQ_INSN in the chain.  */
   if (insn == last)
     set_new_first_and_last_insn (first, seq_insn);
-  else
-    PREV_INSN (NEXT_INSN (seq_insn)) = seq_insn;
 
   if (insn == first)
     set_new_first_and_last_insn (seq_insn, last);
-  else
-    NEXT_INSN (PREV_INSN (seq_insn)) = seq_insn;
 
   /* Build our SEQUENCE and rebuild the insn chain.  */
   XVECEXP (seq, 0, 0) = delay_insn;