# HG changeset patch # User Josef Eisl # Date 1437737703 -7200 # Node ID 8c7850564478ad5c5a52594158751a7c2490f107 # Parent 426a7a36de53fe5b8f7870b42eca39ab1be60c03 LocationMarker: track all registers (not only registers containing references). diff -r 426a7a36de53 -r 8c7850564478 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/MarkBasePointersPhase.java --- 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); } diff -r 426a7a36de53 -r 8c7850564478 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java --- 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 flags) { diff -r 426a7a36de53 -r 8c7850564478 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/IntValueMap.java --- 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;