diff options
author | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-21 22:51:13 +0000 |
---|---|---|
committer | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-07-21 22:51:13 +0000 |
commit | 3939ef08a0b477545001b5829cd7aa985e0989cd (patch) | |
tree | 48f7964c388c21afcc80efd5ffe6795c4bd24612 /gcc/function.c | |
parent | 727047d08e68a5543270758713677e7406336a4e (diff) | |
download | gcc-3939ef08a0b477545001b5829cd7aa985e0989cd.tar.gz |
* function.c (record_hard_reg_sets): Restrict the previous change
to cases where the incoming nominal mode is the same as the
incoming promoted mode and everything happens in MODE_INT.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162391 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/function.c b/gcc/function.c index 74672c38249..5a308f44505 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2918,7 +2918,10 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, || promoted_nominal_mode != data->promoted_mode); moved = false; - if (need_conversion) + if (need_conversion + && GET_MODE_CLASS (data->nominal_mode) == MODE_INT + && data->nominal_mode == data->passed_mode + && data->nominal_mode == GET_MODE (data->entry_parm)) { /* ENTRY_PARM has been converted to PROMOTED_MODE, its mode, by the caller. We now have to convert it to @@ -2979,8 +2982,9 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, if (moved) { emit_insn (insns); - equiv_stack_parm = gen_rtx_fmt_e (code, GET_MODE (parmreg), - equiv_stack_parm); + if (equiv_stack_parm != NULL_RTX) + equiv_stack_parm = gen_rtx_fmt_e (code, GET_MODE (parmreg), + equiv_stack_parm); } } } |