From a708f4b67038ff12800a3874722374a66624e2a0 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 21 Sep 2017 11:14:01 +0000 Subject: [PATCH] Make more use of simplify_gen_binary This patch replaces various places that previously used: if (GET_CODE (y) == CONST_INT) ... plus_constant (..., x, [-]INTVAL (y)) ... else ... gen_rtx_PLUS/MINUS (..., x, y) ... with single calls to simplify_gen_binary. This allows them to handle polynomial integers as well as constants. 2017-09-21 Richard Sandiford Alan Hayward David Sherwood gcc/ * calls.c (compute_argument_addresses): Use simplify_gen_binary rather than choosing between plus_constant and gen_rtx_. * expr.c (emit_push_insn): Likewise. (expand_expr_real_2): Likewise. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r253059 --- gcc/ChangeLog | 9 +++++++++ gcc/calls.c | 12 ++---------- gcc/expr.c | 20 +++----------------- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7eec76768dd..8a534f65f8b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2017-09-21 Richard Sandiford + Alan Hayward + David Sherwood + + * calls.c (compute_argument_addresses): Use simplify_gen_binary + rather than choosing between plus_constant and gen_rtx_. + * expr.c (emit_push_insn): Likewise. + (expand_expr_real_2): Likewise. + 2017-09-21 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/calls.c b/gcc/calls.c index f55e89882de..6bd025ed197 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2197,11 +2197,7 @@ compute_argument_addresses (struct arg_data *args, rtx argblock, int num_actuals if (POINTER_BOUNDS_P (args[i].tree_value)) continue; - if (CONST_INT_P (offset)) - addr = plus_constant (Pmode, arg_reg, INTVAL (offset)); - else - addr = gen_rtx_PLUS (Pmode, arg_reg, offset); - + addr = simplify_gen_binary (PLUS, Pmode, arg_reg, offset); addr = plus_constant (Pmode, addr, arg_offset); if (args[i].partial != 0) @@ -2231,11 +2227,7 @@ compute_argument_addresses (struct arg_data *args, rtx argblock, int num_actuals } set_mem_align (args[i].stack, align); - if (CONST_INT_P (slot_offset)) - addr = plus_constant (Pmode, arg_reg, INTVAL (slot_offset)); - else - addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset); - + addr = simplify_gen_binary (PLUS, Pmode, arg_reg, slot_offset); addr = plus_constant (Pmode, addr, arg_offset); if (args[i].partial != 0) diff --git a/gcc/expr.c b/gcc/expr.c index a9689a6fd52..2f8432d92cc 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4541,15 +4541,8 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size, else #endif { - if (CONST_INT_P (args_so_far)) - addr - = memory_address (mode, - plus_constant (Pmode, args_addr, - INTVAL (args_so_far))); - else - addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr, - args_so_far)); - dest = gen_rtx_MEM (mode, addr); + addr = simplify_gen_binary (PLUS, Pmode, args_addr, args_so_far); + dest = gen_rtx_MEM (mode, memory_address (mode, addr)); /* We do *not* set_mem_attributes here, because incoming arguments may overlap with sibling call outgoing arguments and we cannot @@ -8565,14 +8558,7 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode, { expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, modifier); - - /* If the last operand is a CONST_INT, use plus_constant of - the negated constant. Else make the MINUS. */ - if (CONST_INT_P (op1)) - return REDUCE_BIT_FIELD (plus_constant (mode, op0, - -INTVAL (op1))); - else - return REDUCE_BIT_FIELD (gen_rtx_MINUS (mode, op0, op1)); + return simplify_gen_binary (MINUS, mode, op0, op1); } /* No sense saving up arithmetic to be done -- 2.30.2