OSDN Git Service

* reload1.c (reload_combine): Take multi-hard-regs into account
authorclm <clm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Dec 2000 16:10:19 +0000 (16:10 +0000)
committerclm <clm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Dec 2000 16:10:19 +0000 (16:10 +0000)
        when processing CALL_INSN_FUNCTION_USAGE.

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

gcc/ChangeLog
gcc/reload1.c

index 7e5508c..08b5a2d 100644 (file)
@@ -1,3 +1,8 @@
+2000-12-19  Catherine Moore  <clm@redhat.com>
+
+       * reload1.c (reload_combine): Take multi-hard-regs into account
+       when processing CALL_INSN_FUNCTION_USAGE.
+
 2000-12-19  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * invoke.texi (-print-search-dirs): Make references to cpp refer
index 1babaf7..ee252a6 100644 (file)
@@ -8651,20 +8651,27 @@ reload_combine ()
 
          for (link = CALL_INSN_FUNCTION_USAGE (insn); link;
               link = XEXP (link, 1))
-           if (GET_CODE (XEXP (XEXP (link, 0), 0)) == REG)
-             {
-               unsigned int regno = REGNO (XEXP (XEXP (link, 0), 0));
+           {
+             rtx usage_rtx = XEXP (XEXP (link, 0), 0);
+             if (GET_CODE (usage_rtx) == REG)
+               {
+                 int i;
+                 unsigned int start_reg = REGNO (usage_rtx);
+                 unsigned int num_regs =
+                       HARD_REGNO_NREGS (start_reg, GET_MODE (usage_rtx));
+                 unsigned int end_reg  = start_reg + num_regs - 1;
+                 for (i = start_reg; i <= end_reg; i++)
+                   if (GET_CODE (XEXP (link, 0)) == CLOBBER)
+                     {
+                       reg_state[i].use_index = RELOAD_COMBINE_MAX_USES;
+                       reg_state[i].store_ruid = reload_combine_ruid;
+                     }
+                   else
+                     reg_state[i].use_index = -1;
+                }
+            }
 
-               if (GET_CODE (XEXP (link, 0)) == CLOBBER)
-                 {
-                   reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES;
-                   reg_state[regno].store_ruid = reload_combine_ruid;
-                 }
-               else
-                 reg_state[regno].use_index = -1;
-             }
        }
-
       else if (GET_CODE (insn) == JUMP_INSN
               && GET_CODE (PATTERN (insn)) != RETURN)
        {