Mercurial > hg > graal-compiler
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); }