aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/function.cc')
-rw-r--r--gcc/function.cc22
1 files changed, 10 insertions, 12 deletions
diff --git a/gcc/function.cc b/gcc/function.cc
index a5b245a..48167b0 100644
--- a/gcc/function.cc
+++ b/gcc/function.cc
@@ -1722,19 +1722,17 @@ instantiate_virtual_regs_in_insn (rtx_insn *insn)
new_rtx = instantiate_new_reg (SUBREG_REG (x), &offset);
if (new_rtx == NULL)
continue;
+ start_sequence ();
if (maybe_ne (offset, 0))
- {
- start_sequence ();
- new_rtx = expand_simple_binop
- (GET_MODE (new_rtx), PLUS, new_rtx,
- gen_int_mode (offset, GET_MODE (new_rtx)),
- NULL_RTX, 1, OPTAB_LIB_WIDEN);
- seq = end_sequence ();
- emit_insn_before (seq, insn);
- }
- x = simplify_gen_subreg (recog_data.operand_mode[i], new_rtx,
- GET_MODE (new_rtx), SUBREG_BYTE (x));
+ new_rtx = expand_simple_binop
+ (GET_MODE (new_rtx), PLUS, new_rtx,
+ gen_int_mode (offset, GET_MODE (new_rtx)),
+ NULL_RTX, 1, OPTAB_LIB_WIDEN);
+ x = force_subreg (recog_data.operand_mode[i], new_rtx,
+ GET_MODE (new_rtx), SUBREG_BYTE (x));
gcc_assert (x);
+ seq = end_sequence ();
+ emit_insn_before (seq, insn);
break;
default:
@@ -2937,7 +2935,7 @@ assign_parm_setup_block (struct assign_parm_data_all *all,
if (stack_parm == 0)
{
HOST_WIDE_INT parm_align
- = (STRICT_ALIGNMENT
+ = ((STRICT_ALIGNMENT || BITS_PER_WORD <= MAX_SUPPORTED_STACK_ALIGNMENT)
? MAX (DECL_ALIGN (parm), BITS_PER_WORD) : DECL_ALIGN (parm));
SET_DECL_ALIGN (parm, parm_align);