aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-12-21 07:01:23 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-12-21 07:01:23 +0000
commit80ce7eb44961b50d92b5481b26ce20a50567baae (patch)
treefcde5a366d334d375f7bb38f79072d075184ebfb
parent31ae0e43aac40d1c45d00be9cda260c30d87d154 (diff)
downloadgcc-80ce7eb44961b50d92b5481b26ce20a50567baae.zip
gcc-80ce7eb44961b50d92b5481b26ce20a50567baae.tar.gz
gcc-80ce7eb44961b50d92b5481b26ce20a50567baae.tar.bz2
poly_int: reload<->ira interface
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
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/ira-color.c18
-rw-r--r--gcc/ira-int.h2
-rw-r--r--gcc/ira.h4
4 files changed, 23 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f633487..bdfcb0c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -2,6 +2,17 @@
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>
+
* lra-constraints.c (emit_inc): Change inc_amount from an int
to a poly_int64.
diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index 0148058..cfcdc5b 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -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)
diff --git a/gcc/ira-int.h b/gcc/ira-int.h
index 6296a4f..6cda6b7 100644
--- a/gcc/ira-int.h
+++ b/gcc/ira-int.h
@@ -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. */
diff --git a/gcc/ira.h b/gcc/ira.h
index fba2ca5..d0c8c6e 100644
--- 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);