Mercurial > hg > truffle
changeset 6668:eaca0ecbf0ca
Merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 06 Nov 2012 13:59:07 +0100 |
parents | e54aeb000ad7 (current diff) 49cd16dfb10c (diff) |
children | 7f6823cc5d26 |
files | |
diffstat | 6 files changed, 29 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Nov 06 13:57:04 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Tue Nov 06 13:59:07 2012 +0100 @@ -125,6 +125,11 @@ public VirtualObjectNode virtualObject(long virtualId) { return new VirtualArrayNode(virtualId, elementType, constantLength); } + + @Override + public int lockCount() { + return 0; + } }; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Nov 06 13:57:04 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Tue Nov 06 13:59:07 2012 +0100 @@ -114,6 +114,11 @@ public VirtualObjectNode virtualObject(long virtualId) { return new VirtualInstanceNode(virtualId, instanceClass(), fields); } + + @Override + public int lockCount() { + return 0; + } }; } return null;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/EscapeOp.java Tue Nov 06 13:57:04 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/EscapeOp.java Tue Nov 06 13:59:07 2012 +0100 @@ -34,4 +34,6 @@ public abstract VirtualObjectNode virtualObject(long virtualId); + public abstract int lockCount(); + }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializeObjectNode.java Tue Nov 06 13:57:04 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializeObjectNode.java Tue Nov 06 13:59:07 2012 +0100 @@ -35,12 +35,12 @@ @Input private final NodeInputList<ValueNode> values; @Input private final VirtualObjectNode virtualObject; - private final boolean locked; + private final int lockCount; - public MaterializeObjectNode(VirtualObjectNode virtualObject, boolean locked) { + public MaterializeObjectNode(VirtualObjectNode virtualObject, int lockCount) { super(StampFactory.exactNonNull(virtualObject.type())); this.virtualObject = virtualObject; - this.locked = locked; + this.lockCount = lockCount; this.values = new NodeInputList<>(this, virtualObject.entryCount()); } @@ -54,7 +54,7 @@ if (virtualObject instanceof VirtualInstanceNode) { VirtualInstanceNode virtual = (VirtualInstanceNode) virtualObject; - NewInstanceNode newInstance = graph.add(new NewInstanceNode(virtual.type(), false, locked)); + NewInstanceNode newInstance = graph.add(new NewInstanceNode(virtual.type(), false, lockCount > 0)); this.replaceAtUsages(newInstance); graph.addAfterFixed(this, newInstance); @@ -73,9 +73,9 @@ ResolvedJavaType element = virtual.componentType(); NewArrayNode newArray; if (element.getKind() == Kind.Object) { - newArray = graph.add(new NewObjectArrayNode(element, ConstantNode.forInt(virtual.entryCount(), graph), false, locked)); + newArray = graph.add(new NewObjectArrayNode(element, ConstantNode.forInt(virtual.entryCount(), graph), false, lockCount > 0)); } else { - newArray = graph.add(new NewPrimitiveArrayNode(element, ConstantNode.forInt(virtual.entryCount(), graph), false, locked)); + newArray = graph.add(new NewPrimitiveArrayNode(element, ConstantNode.forInt(virtual.entryCount(), graph), false, lockCount > 0)); } this.replaceAtUsages(newArray); graph.addAfterFixed(this, newArray); @@ -116,6 +116,11 @@ public VirtualObjectNode virtualObject(long virtualId) { return virtualObject; } + + @Override + public int lockCount() { + return lockCount; + } }; }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/BlockState.java Tue Nov 06 13:57:04 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/BlockState.java Tue Nov 06 13:59:07 2012 +0100 @@ -88,7 +88,7 @@ throw new BailoutException("array materialized with lock"); } - MaterializeObjectNode materialize = new MaterializeObjectNode(virtual, obj.getLockCount() > 0); + MaterializeObjectNode materialize = new MaterializeObjectNode(virtual, obj.getLockCount()); ValueNode[] values = new ValueNode[obj.getEntries().length]; materialize.setProbability(fixed.probability()); ValueNode[] fieldState = obj.getEntries();
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Tue Nov 06 13:57:04 2012 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Tue Nov 06 13:59:07 2012 +0100 @@ -97,7 +97,7 @@ for (int i = 0; i < fieldState.length; i++) { fieldState[i] = state.getScalarAlias(fieldState[i]); } - state.addObject(virtualObject, new ObjectState(virtualObject, fieldState, 0)); + state.addObject(virtualObject, new ObjectState(virtualObject, fieldState, op.lockCount())); state.addAndMarkAlias(virtualObject, (ValueNode) node, usages); effects.deleteFixedNode((FixedWithNextNode) node); virtualIds++; @@ -505,6 +505,7 @@ int virtual = 0; ObjectState startObj = states.get(0).getObjectState(object); int lockCount = startObj.getLockCount(); + boolean locksMatch = true; ValueNode singleValue = startObj.isVirtual() ? null : startObj.getMaterializedValue(); for (BlockState state : states) { ObjectState obj = state.getObjectState(object); @@ -516,9 +517,11 @@ singleValue = null; } } - assert obj.getLockCount() == lockCount : "mismatching lock counts"; + locksMatch &= obj.getLockCount() == lockCount; } + assert virtual < states.size() || locksMatch : "mismatching lock counts at " + merge; + if (virtual < states.size()) { if (singleValue == null) { PhiNode materializedValuePhi = new PhiNode(Kind.Object, merge);