Mercurial > hg > graal-jvmci-8
changeset 16361:faff09aa5999
LSRA spill optimization: only use predecessor block if it has lower probability than the definition.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Wed, 04 Jun 2014 19:43:12 +0200 |
parents | ec54fc47ba5d |
children | b100bd079fff |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java |
diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Wed Jun 04 16:54:56 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Wed Jun 04 19:43:12 2014 +0200 @@ -1883,6 +1883,7 @@ } private DebugMetric betterSpillPos = Debug.metric("BetterSpillPosition"); + private DebugMetric betterSpillPosWithLowerProbability = Debug.metric("BetterSpillPositionWithLowerProbability"); private void findSpillPosition() { for (Interval interval : intervals) { @@ -1916,7 +1917,15 @@ assert dominates(defBlock, spillBlock); betterSpillPos.increment(); Debug.log("Better spill position found (Block %s)", spillBlock); - interval.setSpillDefinitionPos(getFirstLirInstructionId(spillBlock)); + + if (defBlock.probability() <= spillBlock.probability()) { + // better spill block has the same probability -> do nothing + assert defBlock.probability() == spillBlock.probability(); + interval.setSpillState(SpillState.StoreAtDefinition); + } else { + betterSpillPosWithLowerProbability.increment(); + interval.setSpillDefinitionPos(getFirstLirInstructionId(spillBlock)); + } } else { // definition is the best choice interval.setSpillState(SpillState.StoreAtDefinition);