# HG changeset patch # User Lukas Stadler # Date 1351675981 -3600 # Node ID 5bb9511a6764f6e938d67b45e01941385e074d6e # Parent b01f9c391e17e2ffd8e1567da4c3fd6b6c7d8c54 first part of PEA refactoring, fixes diff -r b01f9c391e17 -r 5bb9511a6764 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/BlockState.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/BlockState.java Wed Oct 31 08:20:42 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/BlockState.java Wed Oct 31 10:33:01 2012 +0100 @@ -97,7 +97,7 @@ for (int i = 0; i < fieldState.length; i++) { ObjectState valueObj = objectState(fieldState[i]); if (valueObj != null) { - if (valueObj.getMaterializedValue() == null) { + if (valueObj.isVirtual()) { materializeChangedBefore(fixed, valueObj.virtual, deferred, deferredStores, materializeEffects); } if (deferred.contains(valueObj.virtual)) { diff -r b01f9c391e17 -r 5bb9511a6764 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ObjectState.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ObjectState.java Wed Oct 31 08:20:42 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ObjectState.java Wed Oct 31 10:33:01 2012 +0100 @@ -98,7 +98,6 @@ } public int getLockCount() { - assert isVirtual(); return lockCount; } diff -r b01f9c391e17 -r 5bb9511a6764 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java --- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Wed Oct 31 08:20:42 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Wed Oct 31 10:33:01 2012 +0100 @@ -487,8 +487,9 @@ ObjectState resultState = newState.objectStateOptional(object); if (resultState == null || resultState.isVirtual()) { int virtual = 0; - int lockCount = states.get(0).objectState(object).getLockCount(); - ValueNode singleValue = states.get(0).objectState(object).getMaterializedValue(); + ObjectState startObj = states.get(0).objectState(object); + int lockCount = startObj.getLockCount(); + ValueNode singleValue = startObj.isVirtual() ? null : startObj.getMaterializedValue(); for (BlockState state : states) { ObjectState obj = state.objectState(object); if (obj.isVirtual()) { @@ -519,7 +520,7 @@ } } else { assert virtual == states.size(); - ValueNode[] values = states.get(0).objectState(object).getEntries().clone(); + ValueNode[] values = startObj.getEntries().clone(); PhiNode[] phis = new PhiNode[values.length]; int mismatch = 0; for (int i = 1; i < states.size(); i++) {