OSDN Git Service

* final.c (final_scan_insn): Revert part of 2005-03-30 patch: when
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Apr 2005 15:27:58 +0000 (15:27 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Apr 2005 15:27:58 +0000 (15:27 +0000)
doing a peephole optimization, once again put any notes in the
proper position.

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

gcc/ChangeLog
gcc/final.c

index 56a2879..02d6e23 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-01  Ian Lance Taylor  <ian@airs.com>
+
+       * final.c (final_scan_insn): Revert part of 2005-03-30 patch: when
+       doing a peephole optimization, once again put any notes in the
+       proper position.
+
 2005-04-01  Kazu Hirata  <kazu@cs.umass.edu>
 
        * bb-reorder.c, fold-const.c, varasm.c: Fix comment typos.
index 7633724..ea84255 100644 (file)
@@ -2306,11 +2306,23 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
               emit them before the peephole.  */
            if (next != 0 && next != NEXT_INSN (insn))
              {
-               rtx note;
+               rtx note, prev = PREV_INSN (insn);
 
                for (note = NEXT_INSN (insn); note != next;
                     note = NEXT_INSN (note))
                  final_scan_insn (note, file, optimize, nopeepholes, seen);
+
+               /* Put the notes in the proper position for a later
+                  rescan.  For example, the SH target can do this
+                  when generating a far jump in a delayed branch
+                  sequence.  */
+               note = NEXT_INSN (insn);
+               PREV_INSN (note) = prev;
+               NEXT_INSN (prev) = note;
+               NEXT_INSN (PREV_INSN (next)) = insn;
+               PREV_INSN (insn) = PREV_INSN (next);
+               NEXT_INSN (insn) = next;
+               PREV_INSN (next) = insn;
              }
 
            /* PEEPHOLE might have changed this.  */