Mercurial > hg > graal-jvmci-8
changeset 22351: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;