OSDN Git Service

* sched.c (new_insn_dead_notes): Check if the register was
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 1998 13:53:20 +0000 (13:53 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 1998 13:53:20 +0000 (13:53 +0000)
used in the original instruction.
* haifa-sched.c (new_insn_dead_notes): Likewise.

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

gcc/ChangeLog
gcc/haifa-sched.c
gcc/sched.c

index 42f7119..b0c68c2 100644 (file)
@@ -1,3 +1,9 @@
+Wed Apr 29 21:45:16 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sched.c (new_insn_dead_notes): Check if the register was
+       used in the original instruction.
+       * haifa-sched.c (new_insn_dead_notes): Likewise.
+
 Wed Apr 29 13:46:03 1998  Jim Wilson  <wilson@cygnus.com>
 
        * dwarf2out.c (scope_die_for): If could not find proper scope,
index 8d220f0..7fccfd2 100644 (file)
@@ -7621,6 +7621,13 @@ new_insn_dead_notes (pat, insn, last, orig_insn)
 
   if (GET_CODE (dest) == REG)
     {
+      /* If the original insn already used this register, we may not add new
+         notes for it.  One example for a split that needs this test is
+        when a multi-word memory access with register-indirect addressing
+        is split into multiple memory accesses with auto-increment and
+        one adjusting add instruction for the address register.  */
+      if (reg_referenced_p (dest, PATTERN (orig_insn)))
+       return;
       for (tem = last; tem != insn; tem = PREV_INSN (tem))
        {
          if (GET_RTX_CLASS (GET_CODE (tem)) == 'i'
index a44002e..635dceb 100644 (file)
@@ -3655,6 +3655,13 @@ new_insn_dead_notes (pat, insn, last, orig_insn)
 
   if (GET_CODE (dest) == REG)
     {
+      /* If the original insn already used this register, we may not add new
+         notes for it.  One example for a split that needs this test is
+        when a multi-word memory access with register-indirect addressing
+        is split into multiple memory accesses with auto-increment and
+        one adjusting add instruction for the address register.  */
+      if (reg_referenced_p (dest, PATTERN (orig_insn)))
+       return;
       for (tem = last; tem != insn; tem = PREV_INSN (tem))
        {
          if (GET_RTX_CLASS (GET_CODE (tem)) == 'i'