diff options
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index 2a4629a71e0..9c91c4e0f24 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6695,7 +6695,9 @@ expand_expr_addr_expr_1 (tree exp, rtx target, enum machine_mode tmode, if (modifier != EXPAND_NORMAL) result = force_operand (result, NULL); - tmp = expand_expr (offset, NULL_RTX, tmode, EXPAND_NORMAL); + tmp = expand_expr (offset, NULL_RTX, tmode, + modifier == EXPAND_INITIALIZER + ? EXPAND_INITIALIZER : EXPAND_NORMAL); result = convert_memory_address (tmode, result); tmp = convert_memory_address (tmode, tmp); @@ -7118,15 +7120,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, temp = immed_double_const (TREE_INT_CST_LOW (exp), TREE_INT_CST_HIGH (exp), mode); - /* ??? If overflow is set, fold will have done an incomplete job, - which can result in (plus xx (const_int 0)), which can get - simplified by validate_replace_rtx during virtual register - instantiation, which can result in unrecognizable insns. - Avoid this by forcing all overflows into registers. */ - if (TREE_OVERFLOW (exp) - && modifier != EXPAND_INITIALIZER) - temp = force_reg (mode, temp); - return temp; case VECTOR_CST: |