aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2010-07-21 22:51:13 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2010-07-21 22:51:13 +0000
commitdbb9443595084d94c8e785f4d86d1c72d1b72f96 (patch)
tree48f7964c388c21afcc80efd5ffe6795c4bd24612
parent08bd6876cbd11b9e727229ce33dd2d3d8a904993 (diff)
downloadgcc-dbb9443595084d94c8e785f4d86d1c72d1b72f96.zip
gcc-dbb9443595084d94c8e785f4d86d1c72d1b72f96.tar.gz
gcc-dbb9443595084d94c8e785f4d86d1c72d1b72f96.tar.bz2
function.c (record_hard_reg_sets): Restrict the previous change to cases where the incoming nominal mode is the...
* 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. From-SVN: r162391
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/function.c10
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 74607e58..2cef2e9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -18,6 +18,10 @@
an old insn, ignore a use that occurs after store_ruid.
* Makefile.in (postreload.o): Update dependencies.
+ * 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.
+
2010-07-21 Jakub Jelinek <jakub@redhat.com>
PR debug/45015
diff --git a/gcc/function.c b/gcc/function.c
index 74672c3..5a308f4 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);
}
}
}