Message ID | 87wp4tzh4y.fsf@linaro.org |
---|---|
State | Accepted |
Commit | a708f4b67038ff12800a3874722374a66624e2a0 |
Headers | show |
Series | Make more use of simplify_gen_binary | expand |
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
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