+2017-02-16 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/78127
+ * lra.c (lra): Call lra_eliminate before finish the loop after
+ lra_constraint.
+
2017-02-16 Richard Biener <rguenther@suse.de>
* graphite.h: Do not include isl/isl_val_gmp.h, instead include
{
for (;;)
{
- /* We should try to assign hard registers to scratches even
- if there were no RTL transformations in lra_constraints.
- Also we should check IRA assignments on the first
- iteration as they can be wrong because of early clobbers
- operands which are ignored in IRA. */
- if (! lra_constraints (lra_constraint_iter == 0)
- && lra_constraint_iter > 1)
- break;
+ bool reloads_p = lra_constraints (lra_constraint_iter == 0);
/* Constraint transformations may result in that eliminable
hard regs become uneliminable and pseudos which use them
should be spilled. It is better to do it before pseudo
RS6000_PIC_OFFSET_TABLE_REGNUM uneliminable if we started
to use a constant pool. */
lra_eliminate (false, false);
+ /* We should try to assign hard registers to scratches even
+ if there were no RTL transformations in lra_constraints.
+ Also we should check IRA assignments on the first
+ iteration as they can be wrong because of early clobbers
+ operands which are ignored in IRA. */
+ if (! reloads_p && lra_constraint_iter > 1)
+ {
+ /* Stack is not empty here only when there are changes
+ during the elimination sub-pass. */
+ if (bitmap_empty_p (lra_constraint_insn_stack_bitmap))
+ break;
+ else
+ /* If there are no reloads but changing due
+ elimination, restart the constraint sub-pass
+ first. */
+ continue;
+ }
/* Do inheritance only for regular algorithms. */
if (! lra_simple_p)
{