aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDoug Evans <dje@gnu.org>1994-05-27 23:27:50 +0000
committerDoug Evans <dje@gnu.org>1994-05-27 23:27:50 +0000
commit0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5 (patch)
tree82d89828e664516015a582e84da5cb3a9dc59ef2 /gcc
parent869c489d35a294989b952baa3e5aa28fd7deb96d (diff)
downloadgcc-0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5.zip
gcc-0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5.tar.gz
gcc-0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5.tar.bz2
expr.c (use_reg): Fix recording of USE information.
* expr.c (use_reg): Fix recording of USE information. (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. From-SVN: r7378
Diffstat (limited to 'gcc')
-rw-r--r--gcc/calls.c7
-rw-r--r--gcc/expr.c25
-rw-r--r--gcc/expr.h2
3 files changed, 17 insertions, 17 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 4b264f8..444d00c 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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. */
diff --git a/gcc/expr.c b/gcc/expr.c
index 9c5f0a4..6ca3057 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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));
}
/* Write zeros through the storage of OBJECT.
diff --git a/gcc/expr.h b/gcc/expr.h
index 0306530..7abeb73 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -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. */