From 0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Fri, 27 May 1994 23:27:50 +0000 Subject: [PATCH] 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 --- gcc/calls.c | 7 +++++-- gcc/expr.c | 25 +++++++++++-------------- gcc/expr.h | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gcc/calls.c b/gcc/calls.c index 4b264f88293..444d00c13cf 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 9c5f0a4229f..6ca30573d72 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 03065304db3..7abeb73c752 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. */ -- 2.30.2