On September 20, 2017 2:30:53 PM GMT+02:00, Richard Sandiford 
<richard.sandif...@linaro.org> wrote:
>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.
>
>Tested on aarch64-linux-gnu, x86_64-linux-gnu and
>powerpc64le-linus-gnu.
>OK to install?

OK. 

Richard. 

>Richard
>
>
>2017-09-20  Richard Sandiford  <richard.sandif...@linaro.org>
>           Alan Hayward  <alan.hayw...@arm.com>
>           David Sherwood  <david.sherw...@arm.com>
>
>gcc/
>       * calls.c (compute_argument_addresses): Use simplify_gen_binary
>       rather than choosing between plus_constant and gen_rtx_<CODE>.
>       * expr.c (emit_push_insn): Likewise.
>       (expand_expr_real_2): Likewise.
>
>Index: gcc/calls.c
>===================================================================
>--- gcc/calls.c        2017-09-12 14:27:14.515326027 +0100
>+++ gcc/calls.c        2017-09-20 13:28:58.742856729 +0100
>@@ -2197,11 +2197,7 @@ compute_argument_addresses (struct arg_d
>         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_d
>           }
>         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)
>Index: gcc/expr.c
>===================================================================
>--- gcc/expr.c 2017-09-18 14:58:24.371655718 +0100
>+++ gcc/expr.c 2017-09-20 13:28:58.743765039 +0100
>@@ -4541,15 +4541,8 @@ emit_push_insn (rtx x, machine_mode mode
>       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 @@ #define REDUCE_BIT_FIELD(expr)  (reduce_b
>       {
>         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

Reply via email to