diff options
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 67 |
1 files changed, 11 insertions, 56 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index a906506f07b..cd5eae16880 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4435,7 +4435,7 @@ expand_assignment (tree to, tree from, bool nontemporal) /* Emits nontemporal store insn that moves FROM to TO. Returns true if this succeeded, false otherwise. */ -static bool +bool emit_storent_insn (rtx to, rtx from) { enum machine_mode mode = GET_MODE (to), imode; @@ -4485,7 +4485,6 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) { rtx temp; rtx alt_rtl = NULL_RTX; - int dont_return_target = 0; location_t loc = EXPR_LOCATION (exp); if (VOID_TYPE_P (TREE_TYPE (exp))) @@ -4646,19 +4645,6 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) (call_param_p ? EXPAND_STACK_PARM : EXPAND_NORMAL), &alt_rtl); - /* Return TARGET if it's a specified hardware register. - If TARGET is a volatile mem ref, either return TARGET - or return a reg copied *from* TARGET; ANSI requires this. - - Otherwise, if TEMP is not TARGET, return TEMP - if it is constant (for efficiency), - or if we really want the correct value. */ - if (!(target && REG_P (target) - && REGNO (target) < FIRST_PSEUDO_REGISTER) - && !(MEM_P (target) && MEM_VOLATILE_P (target)) - && ! rtx_equal_p (temp, target) - && CONSTANT_P (temp)) - dont_return_target = 1; } /* If TEMP is a VOIDmode constant and the mode of the type of EXP is not @@ -4707,15 +4693,7 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) && GET_MODE (temp) != VOIDmode) { int unsignedp = TYPE_UNSIGNED (TREE_TYPE (exp)); - if (dont_return_target) - { - /* In this case, we will return TEMP, - so make sure it has the proper mode. - But don't forget to store the value into TARGET. */ - temp = convert_to_mode (GET_MODE (target), temp, unsignedp); - emit_move_insn (target, temp); - } - else if (GET_MODE (target) == BLKmode + if (GET_MODE (target) == BLKmode || GET_MODE (temp) == BLKmode) emit_block_move (target, temp, expr_size (exp), (call_param_p @@ -7128,9 +7106,6 @@ expand_constructor (tree exp, rtx target, enum expand_modifier modifier, COMPOUND_EXPR whose second argument is such a VAR_DECL, and so on recursively. */ -static rtx expand_expr_real_1 (tree, rtx, enum machine_mode, - enum expand_modifier, rtx *); - rtx expand_expr_real (tree exp, rtx target, enum machine_mode tmode, enum expand_modifier modifier, rtx *alt_rtl) @@ -7203,7 +7178,7 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode, return ret; } -static rtx +rtx expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode, enum expand_modifier modifier) { @@ -8251,7 +8226,7 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode, } #undef REDUCE_BIT_FIELD -static rtx +rtx expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, enum expand_modifier modifier, rtx *alt_rtl) { @@ -8611,12 +8586,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return ret; } - case GOTO_EXPR: - if (TREE_CODE (treeop0) == LABEL_DECL) - expand_goto (treeop0); - else - expand_computed_goto (treeop0); - return const0_rtx; case CONSTRUCTOR: /* If we don't need the result, just ensure we evaluate any @@ -9505,13 +9474,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return const0_rtx; } - case RETURN_EXPR: - if (!treeop0) - expand_null_return (); - else - expand_return (treeop0); - return const0_rtx; - case ADDR_EXPR: return expand_expr_addr_expr (exp, target, tmode, modifier); @@ -9523,9 +9485,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, op0 = expand_normal (treeop0); return read_complex_part (op0, true); + case RETURN_EXPR: + case LABEL_EXPR: + case GOTO_EXPR: + case SWITCH_EXPR: + case ASM_EXPR: case RESX_EXPR: - expand_resx_expr (exp); - return const0_rtx; + /* Expanded in cfgexpand.c. */ + gcc_unreachable (); case TRY_CATCH_EXPR: case CATCH_EXPR: @@ -9563,18 +9530,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, initialization constants, and should not be expanded. */ gcc_unreachable (); - case SWITCH_EXPR: - expand_case (exp); - return const0_rtx; - - case LABEL_EXPR: - expand_label (treeop0); - return const0_rtx; - - case ASM_EXPR: - expand_asm_expr (exp); - return const0_rtx; - case WITH_SIZE_EXPR: /* WITH_SIZE_EXPR expands to its first argument. The caller should have pulled out the size to use in whatever context it needed. */ |