poly_int: reload<->ira interface
authorRichard Sandiford <richard.sandiford@linaro.org>
Thu, 21 Dec 2017 07:01:23 +0000 (07:01 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 21 Dec 2017 07:01:23 +0000 (07:01 +0000)
This patch uses poly_int64 for:

- ira_reuse_stack_slot
- ira_mark_new_stack_slot
- ira_spilled_reg_stack_slot::width

all of which are part of the IRA/reload interface.

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

gcc/
* ira-int.h (ira_spilled_reg_stack_slot::width): Change from
an unsigned int to a poly_uint64.
* ira.h (ira_reuse_stack_slot, ira_mark_new_stack_slot): Take the
sizes as poly_uint64s rather than unsigned ints.
* ira-color.c (ira_reuse_stack_slot, ira_mark_new_stack_slot):
Likewise.

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

gcc/ChangeLog
gcc/ira-color.c
gcc/ira-int.h
gcc/ira.h

index f633487e528844f294396698cd61892e927c9baa..bdfcb0cb66077c3ec9b78192156c661c5c702378 100644 (file)
@@ -1,3 +1,14 @@
+2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
+           Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * ira-int.h (ira_spilled_reg_stack_slot::width): Change from
+       an unsigned int to a poly_uint64.
+       * ira.h (ira_reuse_stack_slot, ira_mark_new_stack_slot): Take the
+       sizes as poly_uint64s rather than unsigned ints.
+       * ira-color.c (ira_reuse_stack_slot, ira_mark_new_stack_slot):
+       Likewise.
+
 2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index 0148058aeee732790d11d1352a2606af8a98f67d..cfcdc5b23d68231cc0c517bd0cb1968703e72582 100644 (file)
@@ -4494,8 +4494,8 @@ ira_reassign_pseudos (int *spilled_pseudo_regs, int num,
    TOTAL_SIZE.  In the case of failure to find a slot which can be
    used for REGNO, the function returns NULL.  */
 rtx
-ira_reuse_stack_slot (int regno, unsigned int inherent_size,
-                     unsigned int total_size)
+ira_reuse_stack_slot (int regno, poly_uint64 inherent_size,
+                     poly_uint64 total_size)
 {
   unsigned int i;
   int slot_num, best_slot_num;
@@ -4508,8 +4508,8 @@ ira_reuse_stack_slot (int regno, unsigned int inherent_size,
 
   ira_assert (! ira_use_lra_p);
 
-  ira_assert (inherent_size == PSEUDO_REGNO_BYTES (regno)
-             && inherent_size <= total_size
+  ira_assert (known_eq (inherent_size, PSEUDO_REGNO_BYTES (regno))
+             && known_le (inherent_size, total_size)
              && ALLOCNO_HARD_REGNO (allocno) < 0);
   if (! flag_ira_share_spill_slots)
     return NULL_RTX;
@@ -4532,8 +4532,8 @@ ira_reuse_stack_slot (int regno, unsigned int inherent_size,
          slot = &ira_spilled_reg_stack_slots[slot_num];
          if (slot->mem == NULL_RTX)
            continue;
-         if (slot->width < total_size
-             || GET_MODE_SIZE (GET_MODE (slot->mem)) < inherent_size)
+         if (maybe_lt (slot->width, total_size)
+             || maybe_lt (GET_MODE_SIZE (GET_MODE (slot->mem)), inherent_size))
            continue;
 
          EXECUTE_IF_SET_IN_BITMAP (&slot->spilled_regs,
@@ -4585,7 +4585,7 @@ ira_reuse_stack_slot (int regno, unsigned int inherent_size,
     }
   if (x != NULL_RTX)
     {
-      ira_assert (slot->width >= total_size);
+      ira_assert (known_ge (slot->width, total_size));
 #ifdef ENABLE_IRA_CHECKING
       EXECUTE_IF_SET_IN_BITMAP (&slot->spilled_regs,
                                FIRST_PSEUDO_REGISTER, i, bi)
@@ -4614,7 +4614,7 @@ ira_reuse_stack_slot (int regno, unsigned int inherent_size,
    TOTAL_SIZE was allocated for REGNO.  We store this info for
    subsequent ira_reuse_stack_slot calls.  */
 void
-ira_mark_new_stack_slot (rtx x, int regno, unsigned int total_size)
+ira_mark_new_stack_slot (rtx x, int regno, poly_uint64 total_size)
 {
   struct ira_spilled_reg_stack_slot *slot;
   int slot_num;
@@ -4622,7 +4622,7 @@ ira_mark_new_stack_slot (rtx x, int regno, unsigned int total_size)
 
   ira_assert (! ira_use_lra_p);
 
-  ira_assert (PSEUDO_REGNO_BYTES (regno) <= total_size);
+  ira_assert (known_le (PSEUDO_REGNO_BYTES (regno), total_size));
   allocno = ira_regno_allocno_map[regno];
   slot_num = -ALLOCNO_HARD_REGNO (allocno) - 2;
   if (slot_num == -1)
index 6296a4fd661c61195020605460c60f04e8c6de7a..6cda6b7610648a605a45cdb85fbc11935d7c8271 100644 (file)
@@ -604,7 +604,7 @@ struct ira_spilled_reg_stack_slot
   /* RTL representation of the stack slot.  */
   rtx mem;
   /* Size of the stack slot.  */
-  unsigned int width;
+  poly_uint64_pod width;
 };
 
 /* The number of elements in the following array.  */
index fba2ca53225de7173bf094772608f73114aa0d53..d0c8c6e8c16dec459b9df989e1824815e4e0e397 100644 (file)
--- a/gcc/ira.h
+++ b/gcc/ira.h
@@ -200,8 +200,8 @@ extern void ira_mark_allocation_change (int);
 extern void ira_mark_memory_move_deletion (int, int);
 extern bool ira_reassign_pseudos (int *, int, HARD_REG_SET, HARD_REG_SET *,
                                  HARD_REG_SET *, bitmap);
-extern rtx ira_reuse_stack_slot (int, unsigned int, unsigned int);
-extern void ira_mark_new_stack_slot (rtx, int, unsigned int);
+extern rtx ira_reuse_stack_slot (int, poly_uint64, poly_uint64);
+extern void ira_mark_new_stack_slot (rtx, int, poly_uint64);
 extern bool ira_better_spill_reload_regno_p (int *, int *, rtx, rtx, rtx_insn *);
 extern bool ira_bad_reload_regno (int, rtx, rtx);