changeset 21968:3c93acd57197

LinearScanWalker#allocLockedRegister: only spill current interval if the first use pos with ShouldHaveRegister is bigger than the next register use pos.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 11 Jun 2015 12:21:15 +0200
parents f0e4a8342803
children eef888fdb8b1
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java
diffstat 1 files changed, 2 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java	Mon Jun 08 15:19:36 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java	Thu Jun 11 12:21:15 2015 +0200
@@ -794,6 +794,7 @@
 
             // the register must be free at least until this position
             int firstUsage = interval.firstUsage(RegisterPriority.MustHaveRegister);
+            int firstShouldHaveUsage = interval.firstUsage(RegisterPriority.ShouldHaveRegister);
             int regNeededUntil = Math.min(firstUsage, interval.from() + 1);
             int intervalTo = interval.to();
             assert regNeededUntil > 0 && regNeededUntil < Integer.MAX_VALUE : "interval has no use";
@@ -812,7 +813,7 @@
             }
 
             int regUsePos = (reg == null ? 0 : usePos[reg.number]);
-            if (regUsePos <= firstUsage) {
+            if (regUsePos <= firstShouldHaveUsage) {
                 if (Debug.isLogEnabled()) {
                     Debug.log("able to spill current interval. firstUsage(register): %d, usePos: %d", firstUsage, regUsePos);
                 }