aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/lra-lives.c6
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b3a42ae..69f5d71 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR middle-end/91957
+ * lra-lives.c (make_hard_regno_dead): Don't record conflicts for
+ eliminable registers.
+ (make_hard_regno_live): Likewise, and don't make them live.
+
2019-10-01 David Malcolm <dmalcolm@redhat.com>
* diagnostic-show-locus.c (layout::print_gap_in_line_numbering):
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 389a79d..1d1525c 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -281,7 +281,8 @@ static void
make_hard_regno_live (int regno)
{
lra_assert (HARD_REGISTER_NUM_P (regno));
- if (TEST_HARD_REG_BIT (hard_regs_live, regno))
+ if (TEST_HARD_REG_BIT (hard_regs_live, regno)
+ || TEST_HARD_REG_BIT (eliminable_regset, regno))
return;
SET_HARD_REG_BIT (hard_regs_live, regno);
sparseset_set_bit (start_living, regno);
@@ -295,6 +296,9 @@ make_hard_regno_live (int regno)
static void
make_hard_regno_dead (int regno)
{
+ if (TEST_HARD_REG_BIT (eliminable_regset, regno))
+ return;
+
lra_assert (HARD_REGISTER_NUM_P (regno));
unsigned int i;
EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)