poly_int: push_block/emit_push_insn
authorRichard Sandiford <richard.sandiford@linaro.org>
Thu, 21 Dec 2017 07:00:37 +0000 (07:00 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 21 Dec 2017 07:00:37 +0000 (07:00 +0000)
This patch changes the "extra" parameters to push_block and
emit_push_insn from int to poly_int64.

2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

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.

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

gcc/ChangeLog
gcc/expr.c
gcc/expr.h

index 7039a3de99d63d1b168c3f75c5a05a72c50fd90a..64577be7f0bba86d1054aff9d79b695e924d1d76 100644 (file)
@@ -1,3 +1,11 @@
+2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * 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.
+
 2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index 4d146f9e2bad101ac5ad89059086b2f5a75874ed..64baaafed265db76e574d576db46c0de62aaed1a 100644 (file)
@@ -3867,19 +3867,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_eq (extra, 0))
     anti_adjust_stack (size);
   else
     {
       temp = copy_to_mode_reg (Pmode, size);
-      if (extra != 0)
+      if (maybe_ne (extra, 0))
        temp = expand_binop (Pmode, add_optab, temp,
                             gen_int_mode (extra, Pmode),
                             temp, 0, OPTAB_LIB_WIDEN);
@@ -3889,7 +3889,7 @@ push_block (rtx size, int extra, int below)
   if (STACK_GROWS_DOWNWARD)
     {
       temp = virtual_outgoing_args_rtx;
-      if (extra != 0 && below)
+      if (maybe_ne (extra, 0) && below)
        temp = plus_constant (Pmode, temp, extra);
     }
   else
@@ -3897,7 +3897,7 @@ push_block (rtx size, int extra, int below)
       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_ne (extra, 0) && !below)
        temp = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx,
                             negate_rtx (Pmode, plus_constant (Pmode, size,
                                                               extra)));
@@ -4274,7 +4274,7 @@ memory_load_overlap (rtx x, rtx y, HOST_WIDE_INT size)
 
 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)
 {
@@ -4362,9 +4362,11 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size,
          /* 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_ne (extra, 0)
+             && 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);
        }
@@ -4485,9 +4487,11 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size,
       /* 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_ne (extra, 0)
+         && 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
@@ -4536,9 +4540,11 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size,
       /* 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_ne (extra, 0)
+         && args_addr == 0
+         && where_pad != PAD_NONE
+         && where_pad != stack_direction)
+       anti_adjust_stack (gen_int_mode (extra, Pmode));
 
 #ifdef PUSH_ROUNDING
       if (args_addr == 0 && PUSH_ARGS)
@@ -4583,8 +4589,8 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size,
        }
     }
 
-  if (extra && args_addr == 0 && where_pad == stack_direction)
-    anti_adjust_stack (GEN_INT (extra));
+  if (maybe_ne (extra, 0) && args_addr == 0 && where_pad == stack_direction)
+    anti_adjust_stack (gen_int_mode (extra, Pmode));
 
   if (alignment_pad && args_addr == 0)
     anti_adjust_stack (alignment_pad);
index a260192788b7af937f3d5650de1a075b6cf08f70..92a6b096a5a77f6a2ca06fa75279c2503ac42677 100644 (file)
@@ -233,11 +233,11 @@ extern rtx emit_move_resolve_push (machine_mode, rtx);
 
 /* 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,