hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/virtual/CommitAllocationNode.java
changeset 46459 7d4e637d3f21
parent 46393 d497d892ab11
child 46551 d01034a83ab2
--- 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;