diff mbox series

Make more use of simplify_gen_binary

Message ID 87wp4tzh4y.fsf@linaro.org
State Accepted
Commit a708f4b67038ff12800a3874722374a66624e2a0
Headers show
Series Make more use of simplify_gen_binary | expand

Commit Message

Richard Sandiford Sept. 20, 2017, 12:30 p.m. UTC
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?

Richard


2017-09-20  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.

Comments

Richard Biener Sept. 20, 2017, 3:03 p.m. UTC | #1
On September 20, 2017 2:30:53 PM GMT+02:00, Richard Sandiford <richard.sandiford@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.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.

>

>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
diff mbox series

Patch

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