Commit 8503f963 by Peter Bergner Committed by Peter Bergner

re PR rtl-optimization/87871 (testcases fail after r265398 on arm)

	PR rtl-optimization/87871
	* ira-lives.c (make_object_dead): Don't add conflicts to
	TOTAL_CONFLICT_HARD_REGS for register ignore_reg_for_conflicts.

From-SVN: r270448
parent 6c76c0e4
2019-04-18 Peter Bergner <bergner@linux.ibm.com>
PR rtl-optimization/87871
* ira-lives.c (make_object_dead): Don't add conflicts to
TOTAL_CONFLICT_HARD_REGS for register ignore_reg_for_conflicts.
2019-04-18 Martin Sebor <msebor@redhat.com> 2019-04-18 Martin Sebor <msebor@redhat.com>
PR middle-end/89797 PR middle-end/89797
......
...@@ -163,7 +163,9 @@ static void ...@@ -163,7 +163,9 @@ static void
make_object_dead (ira_object_t obj) make_object_dead (ira_object_t obj)
{ {
live_range_t lr; live_range_t lr;
int regno;
int ignore_regno = -1; int ignore_regno = -1;
int ignore_total_regno = -1;
int end_regno = -1; int end_regno = -1;
sparseset_clear_bit (objects_live, OBJECT_CONFLICT_ID (obj)); sparseset_clear_bit (objects_live, OBJECT_CONFLICT_ID (obj));
...@@ -174,16 +176,14 @@ make_object_dead (ira_object_t obj) ...@@ -174,16 +176,14 @@ make_object_dead (ira_object_t obj)
&& REGNO (ignore_reg_for_conflicts) < FIRST_PSEUDO_REGISTER) && REGNO (ignore_reg_for_conflicts) < FIRST_PSEUDO_REGISTER)
{ {
end_regno = END_REGNO (ignore_reg_for_conflicts); end_regno = END_REGNO (ignore_reg_for_conflicts);
int src_regno = ignore_regno = REGNO (ignore_reg_for_conflicts); ignore_regno = ignore_total_regno = REGNO (ignore_reg_for_conflicts);
while (src_regno < end_regno) for (regno = ignore_regno; regno < end_regno; regno++)
{ {
if (TEST_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), src_regno)) if (TEST_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), regno))
{ ignore_regno = end_regno;
ignore_regno = end_regno = -1; if (TEST_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), regno))
break; ignore_total_regno = end_regno;
}
src_regno++;
} }
} }
...@@ -192,8 +192,10 @@ make_object_dead (ira_object_t obj) ...@@ -192,8 +192,10 @@ make_object_dead (ira_object_t obj)
/* If IGNORE_REG_FOR_CONFLICTS did not already conflict with OBJ, make /* If IGNORE_REG_FOR_CONFLICTS did not already conflict with OBJ, make
sure it still doesn't. */ sure it still doesn't. */
for (; ignore_regno < end_regno; ignore_regno++) for (regno = ignore_regno; regno < end_regno; regno++)
CLEAR_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), ignore_regno); CLEAR_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), regno);
for (regno = ignore_total_regno; regno < end_regno; regno++)
CLEAR_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), regno);
lr = OBJECT_LIVE_RANGES (obj); lr = OBJECT_LIVE_RANGES (obj);
ira_assert (lr != NULL); ira_assert (lr != NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment