]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Make more use of simplify_gen_binary
authorRichard Sandiford <richard.sandiford@linaro.org>
Thu, 21 Sep 2017 11:14:01 +0000 (11:14 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 21 Sep 2017 11:14:01 +0000 (11:14 +0000)
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  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@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.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r253059

gcc/ChangeLog
gcc/calls.c
gcc/expr.c

index 7eec76768dd886a7deb6dabcffee46d33fbe55df..8a534f65f8b45633c0167a54d6fdf42966736ab2 100644 (file)
@@ -1,3 +1,12 @@
+2017-09-21  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * 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.
+
 2017-09-21  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index f55e89882deaba665740a0383317ba9443f9a52c..6bd025ed197a3af7db95c190518946582fdbc2c0 100644 (file)
@@ -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)
index a9689a6fd52987705c584029683fe6c47f50a4c3..2f8432d92ccac17c0a548faf4a16eff0656cef1b 100644 (file)
@@ -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