diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-09-12 15:49:38 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2011-09-12 15:49:38 +0000 |
commit | 5c3292426c2f267517a223c2cfa01b397222f6e1 (patch) | |
tree | 34a400a54600fe6c44115b7bb2447a9fc4285f81 /gcc/calls.c | |
parent | f2c86ed0c048cc2a360e2e2ca06d116629d493a9 (diff) |
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: https://gcc.gnu.org/svn/gcc/trunk@178784 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index a6e96e48575..1413c8d9dd6 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1756,7 +1756,8 @@ load_register_parameters (struct arg_data *args, int num_actuals, if (GET_CODE (reg) == PARALLEL) use_group_regs (call_fusage, reg); else if (nregs == -1) - use_reg (call_fusage, reg); + use_reg_mode (call_fusage, reg, + TYPE_MODE (TREE_TYPE (args[i].tree_value))); else if (nregs > 0) use_regs (call_fusage, REGNO (reg), nregs); } @@ -2815,10 +2816,10 @@ expand_call (tree exp, rtx target, int ignore) } if (args[i].stack) - call_fusage = gen_rtx_EXPR_LIST (VOIDmode, - gen_rtx_USE (VOIDmode, - args[i].stack), - call_fusage); + call_fusage + = gen_rtx_EXPR_LIST (TYPE_MODE (TREE_TYPE (args[i].tree_value)), + gen_rtx_USE (VOIDmode, args[i].stack), + call_fusage); } /* If we have a parm that is passed in registers but not in memory |