Re: [044/nnn] poly_int: push_block/emit_push_insn

2017-11-28 Thread Jeff Law
On 10/23/2017 11:19 AM, Richard Sandiford wrote:
> This patch changes the "extra" parameters to push_block and
> emit_push_insn from int to poly_int64.
> 
> 
> 2017-10-23  Richard Sandiford  
>   Alan Hayward  
>   David Sherwood  
> 
> gcc/
>   * expr.h (push_block, emit_push_insn): Change the "extra" parameter
>   from HOST_WIDE_INT to poly_int64.
>   * expr.c (push_block, emit_push_insn): Likewise.
OK.
jeff


[044/nnn] poly_int: push_block/emit_push_insn

2017-10-23 Thread Richard Sandiford
This patch changes the "extra" parameters to push_block and
emit_push_insn from int to poly_int64.


2017-10-23  Richard Sandiford  
Alan Hayward  
David Sherwood  

gcc/
* expr.h (push_block, emit_push_insn): Change the "extra" parameter
from HOST_WIDE_INT to poly_int64.
* expr.c (push_block, emit_push_insn): Likewise.

Index: gcc/expr.h
===
--- gcc/expr.h  2017-10-23 17:18:43.842393134 +0100
+++ gcc/expr.h  2017-10-23 17:18:56.434286222 +0100
@@ -233,11 +233,11 @@ extern rtx emit_move_resolve_push (machi
 
 /* Push a block of length SIZE (perhaps variable)
and return an rtx to address the beginning of the block.  */
-extern rtx push_block (rtx, int, int);
+extern rtx push_block (rtx, poly_int64, int);
 
 /* Generate code to push something onto the stack, given its mode and type.  */
 extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int,
-   int, rtx, int, rtx, rtx, int, rtx, bool);
+   int, rtx, poly_int64, rtx, rtx, int, rtx, bool);
 
 /* Extract the accessible bit-range from a COMPONENT_REF.  */
 extern void get_bit_range (poly_uint64_pod *, poly_uint64_pod *, tree,
Index: gcc/expr.c
===
--- gcc/expr.c  2017-10-23 17:18:47.661057448 +0100
+++ gcc/expr.c  2017-10-23 17:18:56.434286222 +0100
@@ -3865,19 +3865,19 @@ compress_float_constant (rtx x, rtx y)
otherwise, the padding comes at high addresses.  */
 
 rtx
-push_block (rtx size, int extra, int below)
+push_block (rtx size, poly_int64 extra, int below)
 {
   rtx temp;
 
   size = convert_modes (Pmode, ptr_mode, size, 1);
   if (CONSTANT_P (size))
 anti_adjust_stack (plus_constant (Pmode, size, extra));
-  else if (REG_P (size) && extra == 0)
+  else if (REG_P (size) && known_zero (extra))
 anti_adjust_stack (size);
   else
 {
   temp = copy_to_mode_reg (Pmode, size);
-  if (extra != 0)
+  if (maybe_nonzero (extra))
temp = expand_binop (Pmode, add_optab, temp,
 gen_int_mode (extra, Pmode),
 temp, 0, OPTAB_LIB_WIDEN);
@@ -3887,7 +3887,7 @@ push_block (rtx size, int extra, int bel
   if (STACK_GROWS_DOWNWARD)
 {
   temp = virtual_outgoing_args_rtx;
-  if (extra != 0 && below)
+  if (maybe_nonzero (extra) && below)
temp = plus_constant (Pmode, temp, extra);
 }
   else
@@ -3895,7 +3895,7 @@ push_block (rtx size, int extra, int bel
   if (CONST_INT_P (size))
temp = plus_constant (Pmode, virtual_outgoing_args_rtx,
  -INTVAL (size) - (below ? 0 : extra));
-  else if (extra != 0 && !below)
+  else if (maybe_nonzero (extra) && !below)
temp = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx,
 negate_rtx (Pmode, plus_constant (Pmode, size,
   extra)));
@@ -4269,7 +4269,7 @@ memory_load_overlap (rtx x, rtx y, HOST_
 
 bool
 emit_push_insn (rtx x, machine_mode mode, tree type, rtx size,
-   unsigned int align, int partial, rtx reg, int extra,
+   unsigned int align, int partial, rtx reg, poly_int64 extra,
rtx args_addr, rtx args_so_far, int reg_parm_stack_space,
rtx alignment_pad, bool sibcall_p)
 {
@@ -4357,9 +4357,11 @@ emit_push_insn (rtx x, machine_mode mode
  /* Push padding now if padding above and stack grows down,
 or if padding below and stack grows up.
 But if space already allocated, this has already been done.  */
- if (extra && args_addr == 0
- && where_pad != PAD_NONE && where_pad != stack_direction)
-   anti_adjust_stack (GEN_INT (extra));
+ if (maybe_nonzero (extra)
+ && args_addr == 0
+ && where_pad != PAD_NONE
+ && where_pad != stack_direction)
+   anti_adjust_stack (gen_int_mode (extra, Pmode));
 
  move_by_pieces (NULL, xinner, INTVAL (size) - used, align, 0);
}
@@ -4480,9 +4482,11 @@ emit_push_insn (rtx x, machine_mode mode
   /* Push padding now if padding above and stack grows down,
 or if padding below and stack grows up.
 But if space already allocated, this has already been done.  */
-  if (extra && args_addr == 0
- && where_pad != PAD_NONE && where_pad != stack_direction)
-   anti_adjust_stack (GEN_INT (extra));
+  if (maybe_nonzero (extra)
+ && args_addr == 0
+ && where_pad != PAD_NONE
+ && where_pad != stack_direction)
+   anti_adjust_stack (gen_int_mode (extra, Pmode));
 
   /* If we make space by pushing it, we might as well push
 the real data.  Otherwise, we can leave OFFSET nonzero
@@ -4531,9