changeset 16359:f686fae77383

LSRA spill optimization: rename SpillInDominator.MultipleSpills to SpillState.SpillInDominator.
author Josef Eisl <josef.eisl@jku.at>
date Wed, 04 Jun 2014 16:05:14 +0200
parents 9371b9c246ca
children ec54fc47ba5d
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/Interval.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java
diffstat 2 files changed, 7 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/Interval.java	Wed Jun 04 15:40:23 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/Interval.java	Wed Jun 04 16:05:14 2014 +0200
@@ -309,9 +309,10 @@
         OneSpillStore,
 
         /**
-         * The interval is spilled multiple times.
+         * The interval is spilled multiple times or is spilled in a loop. Place the store somewhere
+         * on the dominator path between the definition and the usages.
          */
-        MultipleSpills,
+        SpillInDominator,
 
         /**
          * The interval should be stored immediately after its definition to prevent multiple
@@ -654,7 +655,7 @@
     }
 
     void setSpillDefinitionPos(int pos) {
-        assert spillState() == SpillState.MultipleSpills || spillDefinitionPos() == -1 : "cannot set the position twice";
+        assert spillState() == SpillState.SpillInDominator || spillDefinitionPos() == -1 : "cannot set the position twice";
         splitParent().spillDefinitionPos = pos;
     }
 
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java	Wed Jun 04 15:40:23 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java	Wed Jun 04 16:05:14 2014 +0200
@@ -455,11 +455,11 @@
 
             case OneSpillStore: {
                 // the interval is spilled more then once
-                interval.setSpillState(SpillState.MultipleSpills);
+                interval.setSpillState(SpillState.SpillInDominator);
                 break;
             }
 
-            case MultipleSpills:
+            case SpillInDominator:
             case StoreAtDefinition:
             case StartInMemory:
             case NoOptimization:
@@ -1887,7 +1887,7 @@
 
     private void findSpillPosition() {
         for (Interval interval : intervals) {
-            if (interval != null && interval.isSplitParent() && interval.spillState() == SpillState.MultipleSpills) {
+            if (interval != null && interval.isSplitParent() && interval.spillState() == SpillState.SpillInDominator) {
                 AbstractBlock<?> defBlock = blockForId(interval.spillDefinitionPos());
                 AbstractBlock<?> spillBlock = null;
                 try (Indent indent = Debug.logAndIndent("interval %s (%s)", interval, defBlock)) {