From: Doug Evans Date: Fri, 27 May 1994 23:27:50 +0000 (+0000) Subject: expr.c (use_reg): Fix recording of USE information. X-Git-Tag: misc/cutover-egcs-0~6565 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0304dfbb673b5a0ce0af93e9fa6821ab9937d1e5;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/calls.c b/gcc/calls.c index 4b264f882932..444d00c13cff 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 9c5f0a4229f3..6ca30573d726 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 03065304db39..7abeb73c7520 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. */