diff options
author | Doug Evans <dje@gnu.org> | 1994-05-27 23:27:50 +0000 |
---|---|---|
committer | Doug Evans <dje@gnu.org> | 1994-05-27 23:27:50 +0000 |
commit | 0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5 (patch) | |
tree | 82d89828e664516015a582e84da5cb3a9dc59ef2 /gcc | |
parent | 869c489d35a294989b952baa3e5aa28fd7deb96d (diff) | |
download | gcc-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.c | 7 | ||||
-rw-r--r-- | gcc/expr.c | 25 | ||||
-rw-r--r-- | gcc/expr.h | 2 |
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. */ @@ -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. @@ -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. */ |