OSDN Git Service

* expr.c (use_reg): Fix recording of USE information.
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 May 1994 23:27:50 +0000 (23:27 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 May 1994 23:27:50 +0000 (23:27 +0000)
(use_regs): Likewise.
Delete argument `reg'.  All callers changed.
* expr.h (use_regs): Update prototype.
* calls.c (expand_call): Update call to use_regs.  Call use_reg
if parm is wholly in registers.

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

gcc/calls.c
gcc/expr.c
gcc/expr.h

index 4b264f8..444d00c 100644 (file)
@@ -1844,8 +1844,11 @@ expand_call (exp, target, ignore)
            move_block_to_reg (REGNO (reg),
                               validize_mem (args[i].value), nregs,
                               args[i].mode);
-       
-         use_regs (&call_fusage, reg, REGNO (reg), nregs);
+
+         if (nregs == -1)
+           use_reg (&call_fusage, reg);
+         else
+           use_regs (&call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
 
          /* PARTIAL referred only to the first register, so clear it for the
             next time.  */
index 9c5f0a4..6ca3057 100644 (file)
@@ -1671,34 +1671,31 @@ void
 use_reg (call_fusage, reg)
      rtx *call_fusage, reg;
 {
-  if (GET_CODE (reg) == REG
-      && REGNO (reg) >= FIRST_PSEUDO_REGISTER)
+  if (GET_CODE (reg) != REG
+      || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
     abort();
 
   *call_fusage
     = gen_rtx (EXPR_LIST, VOIDmode,
-               gen_rtx (USE, reg_raw_mode[REGNO (reg)], reg), *call_fusage);
-
+              gen_rtx (USE, VOIDmode, reg), *call_fusage);
 }
 
 /* Mark NREGS consecutive regs, starting at REGNO, as holding parameters
    for the CALL_INSN.  */
 
 void
-use_regs (call_fusage, reg, regno, nregs)
-     rtx *call_fusage, reg;
+use_regs (call_fusage, regno, nregs)
+     rtx *call_fusage;
      int regno;
      int nregs;
 {
-  if (nregs <= 1 && reg)
-    use_reg (call_fusage, reg);
-  else
-   {
-     int i;
+  int i;
 
-     for (i = 0; i < nregs; i++)
-        use_reg (call_fusage, gen_rtx (REG, word_mode, regno + i));
-   }
+  if (regno + nregs > FIRST_PSEUDO_REGISTER)
+    abort ();
+
+  for (i = 0; i < nregs; i++)
+    use_reg (call_fusage, gen_rtx (REG, reg_raw_mode[regno + i], regno + i));
 }
 \f
 /* Write zeros through the storage of OBJECT.
index 0306530..7abeb73 100644 (file)
@@ -600,7 +600,7 @@ extern void move_block_from_reg PROTO((int, rtx, int, int));
 extern void use_reg PROTO((rtx*, rtx));
 /* Mark NREGS consecutive regs, starting at REGNO, as holding parameters
    for the next CALL_INSN.  */
-extern void use_regs PROTO((rtx*, rtx, int, int));
+extern void use_regs PROTO((rtx*, int, int));
 
 /* Write zeros through the storage of OBJECT.
    If OBJECT has BLKmode, SIZE is its length in bytes.  */