hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/virtual/CommitAllocationNode.java
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/virtual/CommitAllocationNode.java Fri May 12 13:14:25 2017 -0700
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/virtual/CommitAllocationNode.java Fri May 12 13:56:13 2017 -0700
@@ -24,6 +24,7 @@
import static org.graalvm.compiler.nodeinfo.InputType.Association;
import static org.graalvm.compiler.nodeinfo.InputType.Extension;
+import static org.graalvm.compiler.nodeinfo.InputType.Memory;
import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_UNKNOWN;
import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_UNKNOWN;
@@ -32,6 +33,7 @@
import java.util.List;
import java.util.Map;
+import org.graalvm.api.word.LocationIdentity;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
@@ -46,6 +48,7 @@
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.java.AbstractNewObjectNode;
import org.graalvm.compiler.nodes.java.MonitorIdNode;
+import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;
import org.graalvm.compiler.nodes.memory.WriteNode;
import org.graalvm.compiler.nodes.spi.Lowerable;
import org.graalvm.compiler.nodes.spi.LoweringTool;
@@ -54,14 +57,14 @@
// @formatter:off
@NodeInfo(nameTemplate = "Alloc {i#virtualObjects}",
- allowedUsageTypes = Extension,
+ allowedUsageTypes = {Extension, Memory},
cycles = CYCLES_UNKNOWN,
cyclesRationale = "We don't know statically how many, and which, allocations are done.",
size = SIZE_UNKNOWN,
sizeRationale = "We don't know statically how much code for which allocations has to be generated."
)
// @formatter:on
-public final class CommitAllocationNode extends FixedWithNextNode implements VirtualizableAllocation, Lowerable, Simplifiable {
+public final class CommitAllocationNode extends FixedWithNextNode implements VirtualizableAllocation, Lowerable, Simplifiable, MemoryCheckpoint.Single {
public static final NodeClass<CommitAllocationNode> TYPE = NodeClass.create(CommitAllocationNode.class);
@@ -115,6 +118,11 @@
}
@Override
+ public LocationIdentity getLocationIdentity() {
+ return locks.isEmpty() ? LocationIdentity.init() : LocationIdentity.any();
+ }
+
+ @Override
public void afterClone(Node other) {
lockIndexes = new ArrayList<>(lockIndexes);
}
@@ -166,8 +174,7 @@
public void simplify(SimplifierTool tool) {
boolean[] used = new boolean[virtualObjects.size()];
int usedCount = 0;
- for (Node usage : usages()) {
- AllocatedObjectNode addObject = (AllocatedObjectNode) usage;
+ for (AllocatedObjectNode addObject : usages().filter(AllocatedObjectNode.class)) {
int index = virtualObjects.indexOf(addObject.getVirtualObject());
assert !used[index];
used[index] = true;