Re: [091/nnn] poly_int: emit_single_push_insn_1

2017-11-28 Thread Jeff Law
On 10/23/2017 11:36 AM, Richard Sandiford wrote:
> This patch makes emit_single_push_insn_1 cope with polynomial mode sizes.
> 
> 
> 2017-10-23  Richard Sandiford  
>   Alan Hayward  
>   David Sherwood  
> 
> gcc/
>   * expr.c (emit_single_push_insn_1): Treat mode sizes as polynomial.
>   Use plus_constant instead of gen_rtx_PLUS.
OK.
jeff



[091/nnn] poly_int: emit_single_push_insn_1

2017-10-23 Thread Richard Sandiford
This patch makes emit_single_push_insn_1 cope with polynomial mode sizes.


2017-10-23  Richard Sandiford  
Alan Hayward  
David Sherwood  

gcc/
* expr.c (emit_single_push_insn_1): Treat mode sizes as polynomial.
Use plus_constant instead of gen_rtx_PLUS.

Index: gcc/expr.c
===
--- gcc/expr.c  2017-10-23 17:25:35.142976454 +0100
+++ gcc/expr.c  2017-10-23 17:25:37.064907370 +0100
@@ -4141,9 +4141,6 @@ emit_single_push_insn_1 (machine_mode mo
  access to type.  */
   else if (targetm.calls.function_arg_padding (mode, type) == PAD_DOWNWARD)
 {
-  unsigned padding_size = rounded_size - GET_MODE_SIZE (mode);
-  HOST_WIDE_INT offset;
-
   emit_move_insn (stack_pointer_rtx,
  expand_binop (Pmode,
STACK_GROWS_DOWNWARD ? sub_optab
@@ -4152,31 +4149,27 @@ emit_single_push_insn_1 (machine_mode mo
gen_int_mode (rounded_size, Pmode),
NULL_RTX, 0, OPTAB_LIB_WIDEN));
 
-  offset = (HOST_WIDE_INT) padding_size;
+  poly_int64 offset = rounded_size - GET_MODE_SIZE (mode);
   if (STACK_GROWS_DOWNWARD && STACK_PUSH_CODE == POST_DEC)
/* We have already decremented the stack pointer, so get the
   previous value.  */
-   offset += (HOST_WIDE_INT) rounded_size;
+   offset += rounded_size;
 
   if (!STACK_GROWS_DOWNWARD && STACK_PUSH_CODE == POST_INC)
/* We have already incremented the stack pointer, so get the
   previous value.  */
-   offset -= (HOST_WIDE_INT) rounded_size;
+   offset -= rounded_size;
 
-  dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
-   gen_int_mode (offset, Pmode));
+  dest_addr = plus_constant (Pmode, stack_pointer_rtx, offset);
 }
   else
 {
   if (STACK_GROWS_DOWNWARD)
/* ??? This seems wrong if STACK_PUSH_CODE == POST_DEC.  */
-   dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- gen_int_mode (-(HOST_WIDE_INT) rounded_size,
-   Pmode));
+   dest_addr = plus_constant (Pmode, stack_pointer_rtx, -rounded_size);
   else
/* ??? This seems wrong if STACK_PUSH_CODE == POST_INC.  */
-   dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- gen_int_mode (rounded_size, Pmode));
+   dest_addr = plus_constant (Pmode, stack_pointer_rtx, rounded_size);
 
   dest_addr = gen_rtx_PRE_MODIFY (Pmode, stack_pointer_rtx, dest_addr);
 }