changeset 22347:8c7850564478

LocationMarker: track all registers (not only registers containing references).
author Josef Eisl <josef.eisl@jku.at>
date Fri, 24 Jul 2015 13:35:03 +0200
parents 426a7a36de53
children 17b96d2fe8d6
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/MarkBasePointersPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/IntValueMap.java
diffstat 3 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/MarkBasePointersPhase.java	Fri Jul 24 12:14:50 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/MarkBasePointersPhase.java	Fri Jul 24 13:35:03 2015 +0200
@@ -69,6 +69,7 @@
             @Override
             public void put(Value v) {
                 Variable base = (Variable) v.getLIRKind().getDerivedReferenceBase();
+                assert !base.getLIRKind().isValue();
                 variables.put(base.index, base);
             }
 
@@ -80,6 +81,7 @@
             @Override
             public void remove(Value v) {
                 Variable base = (Variable) v.getLIRKind().getDerivedReferenceBase();
+                assert !base.getLIRKind().isValue();
                 variables.put(base.index, null);
             }
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java	Fri Jul 24 12:14:50 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java	Fri Jul 24 13:35:03 2015 +0200
@@ -62,6 +62,9 @@
 
     @Override
     public void put(Value v) {
+        if (!shouldProcessValue(v)) {
+            return;
+        }
         if (isRegister(v)) {
             int index = asRegister(v).getReferenceMapIndex();
             registers.put(index, v);
@@ -93,6 +96,9 @@
 
     @Override
     public void remove(Value v) {
+        if (!shouldProcessValue(v)) {
+            return;
+        }
         if (isRegister(v)) {
             int index = asRegister(v).getReferenceMapIndex();
             registers.put(index, null);
@@ -122,6 +128,14 @@
         throw new UnsupportedOperationException();
     }
 
+    private static boolean shouldProcessValue(Value v) {
+        /*
+         * We always process registers because we have to track the largest register size that is
+         * alive across safepoints in order to save and restore them.
+         */
+        return isRegister(v) || !v.getLIRKind().isValue();
+    }
+
     public void addLiveValues(ReferenceMapBuilder refMap) {
         ValueConsumer addLiveValue = new ValueConsumer() {
             public void visitValue(Value value, OperandMode mode, EnumSet<OperandFlag> flags) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/IntValueMap.java	Fri Jul 24 12:14:50 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/IntValueMap.java	Fri Jul 24 13:35:03 2015 +0200
@@ -55,9 +55,6 @@
     }
 
     public void put(int index, Value value) {
-        if (value != null && value.getLIRKind().isValue()) {
-            return;
-        }
         if (values.length <= index) {
             if (value == null) {
                 return;