OSDN Git Service

(find_regno_note): Find note that overlaps REGNO, not just one that
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Mar 1993 20:36:43 +0000 (20:36 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Mar 1993 20:36:43 +0000 (20:36 +0000)
mentions REGNO explicitly.

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

gcc/rtlanal.c

index 658f57f..549f905 100644 (file)
@@ -1135,7 +1135,9 @@ find_reg_note (insn, kind, datum)
 }
 
 /* Return the reg-note of kind KIND in insn INSN which applies to register
-   number REGNO, if any.  Return 0 if there is no such reg-note.  */
+   number REGNO, if any.  Return 0 if there is no such reg-note.  Note that
+   the REGNO of this NOTE need not be REGNO if REGNO is a hard register;
+   it might be the case that the note overlaps REGNO.  */
 
 rtx
 find_regno_note (insn, kind, regno)
@@ -1150,7 +1152,12 @@ find_regno_note (insn, kind, regno)
        /* Verify that it is a register, so that scratch and MEM won't cause a
           problem here.  */
        && GET_CODE (XEXP (link, 0)) == REG
-       && REGNO (XEXP (link, 0)) == regno)
+       && REGNO (XEXP (link, 0)) <= regno
+       && ((REGNO (XEXP (link, 0))
+            + (REGNO (XEXP (link, 0)) >= FIRST_PSEUDO_REGISTER ? 1
+               : HARD_REGNO_NREGS (REGNO (XEXP (link, 0)),
+                                   GET_MODE (XEXP (link, 0)))))
+           > regno))
       return link;
   return 0;
 }