From b4eeceb9b7f596eef6a585effb14cd3850a273cc Mon Sep 17 00:00:00 2001 From: jakub Date: Mon, 12 Sep 2011 15:49:38 +0000 Subject: PR debug/50299 * calls.c (load_register_parameters): Use use_reg_mode instead of use_reg when adding a single register CALL_INSN_FUNCTION_USAGE entry. (expand_call): Set EXPR_LIST mode to TYPE_MODE of the argument for stack CALL_INSN_FUNCTION_USAGE uses. * expr.h (use_reg_mode): New prototype. (use_reg): Changed into inline around use_reg_mode. * expr.c (use_reg): Renamed to... (use_reg_mode): ... this. Added MODE argument, set EXPR_LIST mode to that mode instead of VOIDmode. * var-tracking.c (prepare_call_arguments): Don't track parameters whose EXPR_LIST mode is VOIDmode, BLKmode or X mode isn't convertible to it using lowpart_subreg. Convert VALUE and REG/MEM to the EXPR_LIST mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178784 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/expr.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'gcc/expr.h') diff --git a/gcc/expr.h b/gcc/expr.h index 74c608ad1ae..16521866bfe 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -321,8 +321,16 @@ extern void emit_group_store (rtx, rtx, tree, int); /* Copy BLKmode object from a set of registers. */ extern rtx copy_blkmode_from_reg (rtx, rtx, tree); +/* Mark REG as holding a parameter for the next CALL_INSN. + Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode. */ +extern void use_reg_mode (rtx *, rtx, enum machine_mode); + /* Mark REG as holding a parameter for the next CALL_INSN. */ -extern void use_reg (rtx *, rtx); +static inline void +use_reg (rtx *fusage, rtx reg) +{ + use_reg_mode (fusage, reg, VOIDmode); +} /* Mark NREGS consecutive regs, starting at REGNO, as holding parameters for the next CALL_INSN. */ -- cgit v1.2.1