changeset 18937:ff232ff8d028

Add utility Node#hasNoUsages.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Fri, 23 Jan 2015 11:52:36 +0100
parents a56574233253
children ef1494ece1a8
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeInputList.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorList.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ValueAnchorCleanupPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowUtil.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java
diffstat 44 files changed, 82 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java	Fri Jan 23 11:52:36 2015 +0100
@@ -217,7 +217,7 @@
     protected int countUnusedConstants(StructuredGraph graph) {
         int total = 0;
         for (ConstantNode node : getConstantNodes(graph)) {
-            if (node.usages().isEmpty()) {
+            if (node.hasNoUsages()) {
                 total++;
             }
         }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java	Fri Jan 23 11:52:36 2015 +0100
@@ -309,6 +309,13 @@
     }
 
     /**
+     * Checks whether this node has no usages.
+     */
+    public final boolean hasNoUsages() {
+        return this.usage0 == null;
+    }
+
+    /**
      * Finds the index of the last non-null entry in a node array. The search assumes that all
      * non-null entries precede the first null entry in the array.
      *
@@ -564,7 +571,7 @@
             if (newInput != null) {
                 newInput.addUsage(this);
             }
-            if (oldInput != null && oldInput.usages().isEmpty()) {
+            if (oldInput != null && oldInput.hasNoUsages()) {
                 maybeNotifyZeroUsages(oldInput);
             }
         }
@@ -740,7 +747,7 @@
     private void unregisterInputs() {
         for (Node input : inputs()) {
             removeThisFromUsages(input);
-            if (input.usages().isEmpty()) {
+            if (input.hasNoUsages()) {
                 maybeNotifyZeroUsages(input);
             }
         }
@@ -772,7 +779,7 @@
     }
 
     private boolean checkDeletion() {
-        assertTrue(usages().isEmpty(), "cannot delete node %s because of usages: %s", this, usages());
+        assertTrue(hasNoUsages(), "cannot delete node %s because of usages: %s", this, usages());
         assertTrue(predecessor == null, "cannot delete node %s because of predecessor: %s", this, predecessor);
         return true;
     }
@@ -1082,7 +1089,7 @@
         }
 
         if (precision > 0) {
-            if (!usages().isEmpty()) {
+            if (!hasNoUsages()) {
                 formatter.format(" usages={");
                 int z = 0;
                 for (Node usage : usages()) {
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java	Fri Jan 23 11:52:36 2015 +0100
@@ -732,7 +732,7 @@
                         Fingerprint.submit("duplicating %s", node);
                     }
                     Node newNode = node.clone(graph, WithAllEdges);
-                    assert newNode.inputs().isEmpty() || newNode.usages().isEmpty();
+                    assert newNode.inputs().isEmpty() || newNode.hasNoUsages();
                     assert newNode.getClass() == node.getClass();
                     newNodes.put(node, newNode);
                 }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeInputList.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeInputList.java	Fri Jan 23 11:52:36 2015 +0100
@@ -40,17 +40,17 @@
 
     public NodeInputList(Node self, T[] elements) {
         super(self, elements);
-        assert self.usages().isEmpty();
+        assert self.hasNoUsages();
     }
 
     public NodeInputList(Node self, List<? extends T> elements) {
         super(self, elements);
-        assert self.usages().isEmpty();
+        assert self.hasNoUsages();
     }
 
     public NodeInputList(Node self, Collection<? extends NodeInterface> elements) {
         super(self, elements);
-        assert self.usages().isEmpty();
+        assert self.hasNoUsages();
     }
 
     @Override
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorList.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorList.java	Fri Jan 23 11:52:36 2015 +0100
@@ -40,12 +40,12 @@
 
     public NodeSuccessorList(Node self, T[] elements) {
         super(self, elements);
-        assert self.usages().isEmpty();
+        assert self.hasNoUsages();
     }
 
     public NodeSuccessorList(Node self, List<? extends T> elements) {
         super(self, elements);
-        assert self.usages().isEmpty();
+        assert self.hasNoUsages();
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -40,7 +40,7 @@
         BeginNode prevBegin = BeginNode.prevBegin(this);
         replaceAtUsages(InputType.Anchor, prevBegin);
         replaceAtUsages(InputType.Guard, prevBegin);
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             graph().removeFixed(this);
         }
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -56,7 +56,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             return null;
         } else {
             if (clazz.isConstant()) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -52,7 +52,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             return null;
         } else {
             MetaAccessProvider metaAccess = tool.getMetaAccess();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -79,7 +79,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             return null;
         } else {
             if (klass.isConstant()) {
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -115,7 +115,7 @@
 
                 // remove dead parameters
                 for (ParameterNode param : currentGraph.getNodes(ParameterNode.class)) {
-                    if (param.usages().isEmpty()) {
+                    if (param.hasNoUsages()) {
                         assert param.inputs().isEmpty();
                         param.safeDelete();
                     }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java	Fri Jan 23 11:52:36 2015 +0100
@@ -123,7 +123,7 @@
 
     @Override
     public void deleteUnusedNodes() {
-        if (scale.isAlive() && scale.usages().isEmpty()) {
+        if (scale.isAlive() && scale.hasNoUsages()) {
             GraphUtil.killWithUnusedFloatingInputs(scale);
         }
     }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java	Fri Jan 23 11:52:36 2015 +0100
@@ -346,7 +346,7 @@
 
             boolean newEarlyExitIsLoopExit = newEarlyExit instanceof LoopExitNode;
             for (ProxyNode vpn : loopEarlyExit.proxies().snapshot()) {
-                if (vpn.usages().isEmpty()) {
+                if (vpn.hasNoUsages()) {
                     continue;
                 }
                 final ValueNode replaceWith;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java	Fri Jan 23 11:52:36 2015 +0100
@@ -213,7 +213,7 @@
         markStateNodes(loopBegin, usagesToPatch);
 
         for (PhiNode phi : loopBegin.phis().snapshot()) {
-            if (phi.usages().isEmpty()) {
+            if (phi.hasNoUsages()) {
                 continue;
             }
             ValueNode first;
@@ -253,7 +253,7 @@
             }
         }
 
-        for (PhiNode deadPhi : loopBegin.phis().filter(n -> n.usages().isEmpty()).snapshot()) {
+        for (PhiNode deadPhi : loopBegin.phis().filter(n -> n.hasNoUsages()).snapshot()) {
             if (deadPhi.isAlive()) {
                 GraphUtil.killWithUnusedFloatingInputs(deadPhi);
             }
@@ -309,7 +309,7 @@
         StructuredGraph graph = graph();
         if (endsToMerge.size() == 1) {
             AbstractEndNode end = endsToMerge.get(0);
-            assert end.usages().isEmpty();
+            assert end.hasNoUsages();
             newExit = graph.add(new BeginNode());
             end.replaceAtPredecessor(newExit);
             end.safeDelete();
@@ -328,7 +328,7 @@
             }
 
             for (final PhiNode phi : loopBegin.phis().snapshot()) {
-                if (phi.usages().isEmpty()) {
+                if (phi.hasNoUsages()) {
                     continue;
                 }
                 final PhiNode firstPhi = patchPhi(graph, phi, newExitMerge);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -78,7 +78,7 @@
     }
 
     private void evacuateGuards(FixedNode evacuateFrom) {
-        if (!usages().isEmpty()) {
+        if (!hasNoUsages()) {
             BeginNode prevBegin = prevBegin(evacuateFrom);
             assert prevBegin != null;
             for (Node anchored : anchored().snapshot()) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -60,7 +60,7 @@
             graph().removeFixed(this);
         } else if (condition() instanceof ShortCircuitOrNode) {
             ShortCircuitOrNode shortCircuitOr = (ShortCircuitOrNode) condition();
-            if (isNegated() && usages().isEmpty()) {
+            if (isNegated() && hasNoUsages()) {
                 graph().addAfterFixed(this, graph().add(new FixedGuardNode(shortCircuitOr.getY(), getReason(), getAction(), !shortCircuitOr.isYNegated())));
                 graph().replaceFixedWithFixed(this, graph().add(new FixedGuardNode(shortCircuitOr.getX(), getReason(), getAction(), !shortCircuitOr.isXNegated())));
             }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -176,7 +176,7 @@
             }
             return;
         }
-        if (trueSuccessor().usages().isEmpty() && falseSuccessor().usages().isEmpty()) {
+        if (trueSuccessor().hasNoUsages() && falseSuccessor().hasNoUsages()) {
 
             pushNodesThroughIf(tool);
 
@@ -189,7 +189,7 @@
             return;
         }
 
-        if (falseSuccessor().usages().isEmpty() && (!(falseSuccessor() instanceof LoopExitNode)) && falseSuccessor().next() instanceof IfNode) {
+        if (falseSuccessor().hasNoUsages() && (!(falseSuccessor() instanceof LoopExitNode)) && falseSuccessor().next() instanceof IfNode) {
             BeginNode intermediateBegin = falseSuccessor();
             IfNode nextIf = (IfNode) intermediateBegin.next();
             double probabilityB = (1.0 - this.trueSuccessorProbability) * nextIf.trueSuccessorProbability;
@@ -222,7 +222,7 @@
     }
 
     private void pushNodesThroughIf(SimplifierTool tool) {
-        assert trueSuccessor().usages().isEmpty() && falseSuccessor().usages().isEmpty();
+        assert trueSuccessor().hasNoUsages() && falseSuccessor().hasNoUsages();
         // push similar nodes upwards through the if, thereby deduplicating them
         do {
             BeginNode trueSucc = trueSuccessor();
@@ -267,7 +267,7 @@
      * @return true if a replacement was done.
      */
     private boolean checkForUnsignedCompare(SimplifierTool tool) {
-        assert trueSuccessor().usages().isEmpty() && falseSuccessor().usages().isEmpty();
+        assert trueSuccessor().hasNoUsages() && falseSuccessor().hasNoUsages();
         if (condition() instanceof IntegerLessThanNode) {
             IntegerLessThanNode lessThan = (IntegerLessThanNode) condition();
             Constant y = lessThan.getY().stamp().asConstant();
@@ -491,7 +491,7 @@
      * @return true if a transformation was made, false otherwise
      */
     private boolean removeOrMaterializeIf(SimplifierTool tool) {
-        assert trueSuccessor().usages().isEmpty() && falseSuccessor().usages().isEmpty();
+        assert trueSuccessor().hasNoUsages() && falseSuccessor().hasNoUsages();
         if (trueSuccessor().next() instanceof AbstractEndNode && falseSuccessor().next() instanceof AbstractEndNode) {
             AbstractEndNode trueEnd = (AbstractEndNode) trueSuccessor().next();
             AbstractEndNode falseEnd = (AbstractEndNode) falseSuccessor().next();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -158,7 +158,7 @@
             graph().replaceFixed(this, node);
         }
         GraphUtil.killWithUnusedFloatingInputs(call);
-        if (currentStateAfter.usages().isEmpty()) {
+        if (currentStateAfter.hasNoUsages()) {
             GraphUtil.killWithUnusedFloatingInputs(currentStateAfter);
         }
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -184,7 +184,7 @@
             foreign.setBci(bci());
         }
         if (node == null) {
-            assert getKind() == Kind.Void && usages().isEmpty();
+            assert getKind() == Kind.Void && hasNoUsages();
             graph().removeSplit(this, next());
         } else if (node instanceof ControlSinkNode) {
             this.replaceAtPredecessor(node);
@@ -195,7 +195,7 @@
             graph().replaceSplit(this, node, next());
         }
         GraphUtil.killWithUnusedFloatingInputs(call);
-        if (state.usages().isEmpty()) {
+        if (state.hasNoUsages()) {
             GraphUtil.killWithUnusedFloatingInputs(state);
         }
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -192,7 +192,7 @@
             loopexit.removeProxies();
             FrameState loopStateAfter = loopexit.stateAfter();
             graph().replaceFixedWithFixed(loopexit, graph().add(new BeginNode()));
-            if (loopStateAfter != null && loopStateAfter.isAlive() && loopStateAfter.usages().isEmpty()) {
+            if (loopStateAfter != null && loopStateAfter.isAlive() && loopStateAfter.hasNoUsages()) {
                 GraphUtil.killWithUnusedFloatingInputs(loopStateAfter);
             }
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -74,7 +74,7 @@
     @Override
     public boolean verify() {
         assertTrue(loopBegin != null, "must have a loop begin");
-        assertTrue(usages().isEmpty(), "LoopEnds can not be used");
+        assertTrue(hasNoUsages(), "LoopEnds can not be used");
         return super.verify();
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -43,7 +43,7 @@
     @Override
     public void simplify(SimplifierTool tool) {
         Node prev = this.predecessor();
-        while (prev.getClass() == BeginNode.class && prev.usages().isEmpty()) {
+        while (prev.getClass() == BeginNode.class && prev.hasNoUsages()) {
             BeginNode begin = (BeginNode) prev;
             prev = prev.predecessor();
             graph().removeFixed(begin);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -96,7 +96,7 @@
             }
             ValueNode removedValue = phi.valueAt(predIndex);
             phi.removeInput(predIndex);
-            if (removedValue != null && removedValue.isAlive() && removedValue.usages().isEmpty() && GraphUtil.isFloatingNode().apply(removedValue)) {
+            if (removedValue != null && removedValue.isAlive() && removedValue.hasNoUsages() && GraphUtil.isFloatingNode().apply(removedValue)) {
                 GraphUtil.killWithUnusedFloatingInputs(removedValue);
             }
         }
@@ -223,7 +223,7 @@
                 end.safeDelete();
             }
             for (PhiNode phi : phis) {
-                if (phi.isAlive() && phi.usages().isEmpty()) {
+                if (phi.isAlive() && phi.hasNoUsages()) {
                     GraphUtil.killWithUnusedFloatingInputs(phi);
                 }
             }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Fri Jan 23 11:52:36 2015 +0100
@@ -276,7 +276,7 @@
         if (node instanceof BeginNode) {
             ((BeginNode) node).prepareDelete();
         }
-        assert node.usages().isEmpty() : node + " " + node.usages();
+        assert node.hasNoUsages() : node + " " + node.usages();
         GraphUtil.unlinkFixedNode(node);
         node.safeDelete();
     }
@@ -311,7 +311,7 @@
 
     public void removeSplit(ControlSplitNode node, BeginNode survivingSuccessor) {
         assert node != null;
-        assert node.usages().isEmpty();
+        assert node.hasNoUsages();
         assert survivingSuccessor != null;
         node.clearSuccessors();
         node.replaceAtPredecessor(survivingSuccessor);
@@ -324,7 +324,7 @@
 
     public void removeSplitPropagate(ControlSplitNode node, BeginNode survivingSuccessor, SimplifierTool tool) {
         assert node != null;
-        assert node.usages().isEmpty();
+        assert node.hasNoUsages();
         assert survivingSuccessor != null;
         List<Node> snapshot = node.successors().snapshot();
         node.clearSuccessors();
@@ -416,7 +416,7 @@
         // evacuateGuards
         merge.prepareDelete((FixedNode) singleEnd.predecessor());
         merge.safeDelete();
-        if (stateAfter != null && stateAfter.isAlive() && stateAfter.usages().isEmpty()) {
+        if (stateAfter != null && stateAfter.isAlive() && stateAfter.hasNoUsages()) {
             GraphUtil.killWithUnusedFloatingInputs(stateAfter);
         }
         if (sux == null) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -69,7 +69,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             if (getGuard() != null && !(getGuard() instanceof FixedNode)) {
                 // The guard is necessary even if the read goes away.
                 return new ValueAnchorNode((ValueNode) getGuard());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -65,7 +65,7 @@
                 break;
             }
         }
-        if (usages().isEmpty() && next() instanceof FixedAccessNode) {
+        if (hasNoUsages() && next() instanceof FixedAccessNode) {
             FixedAccessNode currentNext = (FixedAccessNode) next();
             if (currentNext.getGuard() == anchored) {
                 GraphUtil.removeFixedWithUnusedInputs(this);
@@ -83,7 +83,7 @@
             removeAnchoredNode();
         }
 
-        if (anchored == null && usages().isEmpty()) {
+        if (anchored == null && hasNoUsages()) {
             // anchor is not necessary any more => remove.
             GraphUtil.removeFixedWithUnusedInputs(this);
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -57,7 +57,7 @@
     }
 
     public ValueNode canonical(CanonicalizerTool tool, ValueNode forObject) {
-        if (usages().isEmpty() && !isVolatile() && (isStatic() || StampTool.isPointerNonNull(forObject.stamp()))) {
+        if (hasNoUsages() && !isVolatile() && (isStatic() || StampTool.isPointerNonNull(forObject.stamp()))) {
             return null;
         }
         MetaAccessProvider metaAccess = tool.getMetaAccess();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java	Fri Jan 23 11:52:36 2015 +0100
@@ -139,7 +139,7 @@
         node.safeDelete();
 
         for (Node in : floatingInputs) {
-            if (in.isAlive() && in.usages().isEmpty()) {
+            if (in.isAlive() && in.hasNoUsages()) {
                 killWithUnusedFloatingInputs(in);
             }
         }
@@ -149,7 +149,7 @@
         if (fixed instanceof StateSplit) {
             FrameState stateAfter = ((StateSplit) fixed).stateAfter();
             ((StateSplit) fixed).setStateAfter(null);
-            if (stateAfter.usages().isEmpty()) {
+            if (stateAfter.hasNoUsages()) {
                 killWithUnusedFloatingInputs(stateAfter);
             }
         }
@@ -379,7 +379,7 @@
     }
 
     public static boolean tryKillUnused(Node node) {
-        if (node.isAlive() && isFloatingNode().apply(node) && node.usages().isEmpty()) {
+        if (node.isAlive() && isFloatingNode().apply(node) && node.hasNoUsages()) {
             killWithUnusedFloatingInputs(node);
             return true;
         }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -340,10 +340,10 @@
 
         @Override
         public void finished() {
-            if (trueConstant.usages().isEmpty()) {
+            if (trueConstant.hasNoUsages()) {
                 graph.removeFloating(trueConstant);
             }
-            if (falseConstant.usages().isEmpty()) {
+            if (falseConstant.hasNoUsages()) {
                 graph.removeFloating(falseConstant);
             }
             super.finished();
@@ -770,7 +770,7 @@
                     }
 
                     ifNode.setCondition(replacement);
-                    if (compare.usages().isEmpty()) {
+                    if (compare.hasNoUsages()) {
                         GraphUtil.killWithUnusedFloatingInputs(compare);
                     }
                 }
@@ -786,7 +786,7 @@
 
                         if (replacement != null) {
                             phi.setValueAt(index, replacement);
-                            if (materialize.usages().isEmpty()) {
+                            if (materialize.hasNoUsages()) {
                                 GraphUtil.killWithUnusedFloatingInputs(materialize);
                             }
                         }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -110,7 +110,7 @@
         if (graph.getGuardsStage().ordinal() < GuardsStage.AFTER_FSA.ordinal()) {
             ReentrantNodeIterator.apply(new FrameStateAssignmentClosure(), graph.start(), null);
             graph.setGuardsStage(GuardsStage.AFTER_FSA);
-            graph.getNodes(FrameState.class).filter(state -> state.usages().isEmpty()).forEach(GraphUtil::killWithUnusedFloatingInputs);
+            graph.getNodes(FrameState.class).filter(state -> state.hasNoUsages()).forEach(GraphUtil::killWithUnusedFloatingInputs);
         }
     }
 
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -111,7 +111,7 @@
                     fixedAccess.setNullCheck(true);
                     LogicNode condition = guard.condition();
                     guard.replaceAndDelete(fixedAccess);
-                    if (condition.usages().isEmpty()) {
+                    if (condition.hasNoUsages()) {
                         GraphUtil.killWithUnusedFloatingInputs(condition);
                     }
                     nullGuarded.remove(fixedAccess.object());
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/RemoveValueProxyPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -39,7 +39,7 @@
             FrameState stateAfter = exit.stateAfter();
             if (stateAfter != null) {
                 exit.setStateAfter(null);
-                if (stateAfter.usages().isEmpty()) {
+                if (stateAfter.hasNoUsages()) {
                     GraphUtil.killWithUnusedFloatingInputs(stateAfter);
                 }
             }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -301,7 +301,7 @@
                 BeginNode prevBegin = BeginNode.prevBegin(forwardEnd);
                 anchorDuplicate.replaceAtUsages(InputType.Guard, prevBegin);
                 anchorDuplicate.replaceAtUsages(InputType.Anchor, prevBegin);
-                assert anchorDuplicate.usages().isEmpty();
+                assert anchorDuplicate.hasNoUsages();
 
                 FixedNode next = anchorDuplicate.next();
                 anchorDuplicate.setNext(null);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -182,7 +182,7 @@
         }
 
         GraphUtil.killCFG(trappingContinuation);
-        if (isNullNode.usages().isEmpty()) {
+        if (isNullNode.hasNoUsages()) {
             GraphUtil.killWithUnusedFloatingInputs(isNullNode);
         }
     }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ValueAnchorCleanupPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ValueAnchorCleanupPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -81,7 +81,7 @@
                         state.anchoredValues.add(anchored);
                     }
                 }
-                if (anchor.getAnchoredNode() == null && anchor.usages().isEmpty()) {
+                if (anchor.getAnchoredNode() == null && anchor.hasNoUsages()) {
                     node.graph().removeFixed(anchor);
                 }
             }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowUtil.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowUtil.java	Fri Jan 23 11:52:36 2015 +0100
@@ -37,7 +37,7 @@
     }
 
     public static boolean lacksUsages(Node n) {
-        return n.usages().isEmpty();
+        return n.hasNoUsages();
     }
 
     public static ResolvedJavaType widen(ResolvedJavaType a, ResolvedJavaType b) {
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Fri Jan 23 11:52:36 2015 +0100
@@ -343,7 +343,7 @@
         out.println("=== Succesors ===");
         printNamedNodes(node, node.successors().iterator(), "", "\n", null);
         out.println("=== Usages ===");
-        if (!node.usages().isEmpty()) {
+        if (!node.hasNoUsages()) {
             for (Node usage : node.usages()) {
                 out.print(nodeToString(usage)).print(" ");
             }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -137,7 +137,7 @@
                         setStateAfter(node.graph(), stateSplit, INVALID_FRAMESTATE_BCI, false);
                     } else {
                         stateSplit.setStateAfter(null);
-                        if (frameState.usages().isEmpty()) {
+                        if (frameState.hasNoUsages()) {
                             GraphUtil.killWithUnusedFloatingInputs(frameState);
                         }
                     }
@@ -229,7 +229,7 @@
             FrameState currentStateAfter = node.stateAfter();
             if (currentStateAfter != null || !replaceOnly) {
                 node.setStateAfter(graph.add(new FrameState(bci)));
-                if (currentStateAfter != null && currentStateAfter.usages().isEmpty()) {
+                if (currentStateAfter != null && currentStateAfter.hasNoUsages()) {
                     GraphUtil.killWithUnusedFloatingInputs(currentStateAfter);
                 }
             }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java	Fri Jan 23 11:52:36 2015 +0100
@@ -83,7 +83,7 @@
             }
         }
 
-        assert instanceOf.usages().isEmpty();
+        assert instanceOf.hasNoUsages();
         if (!instanceOf.isDeleted()) {
             GraphUtil.killWithUnusedFloatingInputs(instanceOf);
         }
@@ -234,7 +234,7 @@
         public void replaceUsingInstantiation() {
             ValueNode newValue = instantiation.asMaterialization(usage.graph(), trueValue, falseValue);
             usage.replaceAtUsages(newValue);
-            assert usage.usages().isEmpty();
+            assert usage.hasNoUsages();
             GraphUtil.killWithUnusedFloatingInputs(usage);
         }
 
@@ -245,7 +245,7 @@
             newNode.inferStamp();
             instantiation.initialize(newNode, trueValue, falseValue);
             usage.replaceAtUsages(newNode);
-            assert usage.usages().isEmpty();
+            assert usage.hasNoUsages();
             GraphUtil.killWithUnusedFloatingInputs(usage);
         }
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java	Fri Jan 23 11:52:36 2015 +0100
@@ -406,7 +406,7 @@
             usage.replaceFirstInput(input, intrinsifiedNode);
             Debug.log("%s: Checkcast used in a return with forNodeIntrinsic stamp", Debug.contextSnapshot(JavaMethod.class));
         } else if (usage instanceof IsNullNode) {
-            if (!usage.usages().isEmpty()) {
+            if (!usage.hasNoUsages()) {
                 assert usage.usages().count() == 1 && usage.usages().first().predecessor() == input : usage + " " + input;
                 graph.replaceFloating((FloatingNode) usage, LogicConstantNode.contradiction(graph));
                 Debug.log("%s: Replaced IsNull with false", Debug.contextSnapshot(JavaMethod.class));
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Fri Jan 23 11:52:36 2015 +0100
@@ -726,7 +726,7 @@
         Debug.dump(snippet, "SnippetTemplate after fixing memory anchoring");
 
         StartNode entryPointNode = snippet.start();
-        if (memoryAnchor.usages().isEmpty()) {
+        if (memoryAnchor.hasNoUsages()) {
             memoryAnchor.safeDelete();
         } else {
             snippetCopy.addAfterFixed(snippetCopy.start(), memoryAnchor);
@@ -746,7 +746,7 @@
             this.returnNode.setMemoryMap(memoryMap);
             for (MemoryMapNode mm : memMaps) {
                 if (mm != memoryMap && mm.isAlive()) {
-                    assert mm.usages().isEmpty();
+                    assert mm.hasNoUsages();
                     GraphUtil.killWithUnusedFloatingInputs(mm);
                 }
             }
@@ -986,7 +986,7 @@
                 }
             }
             if (newNode == null) {
-                assert oldNode.usages().isEmpty();
+                assert oldNode.hasNoUsages();
             } else {
                 oldNode.replaceAtUsages(newNode);
             }
@@ -1176,7 +1176,7 @@
                 if (returnValue == null && replacee.usages().isNotEmpty() && replacee instanceof MemoryCheckpoint) {
                     replacer.replace(replacee, null, mmap);
                 } else {
-                    assert returnValue != null || replacee.usages().isEmpty();
+                    assert returnValue != null || replacee.hasNoUsages();
                     replacer.replace(replacee, returnValue, mmap);
                 }
                 if (returnDuplicate.isAlive()) {
@@ -1273,7 +1273,7 @@
             // Replace all usages of the replacee with the value returned by the snippet
             ReturnNode returnDuplicate = (ReturnNode) duplicates.get(returnNode);
             ValueNode returnValue = returnDuplicate.result();
-            assert returnValue != null || replacee.usages().isEmpty();
+            assert returnValue != null || replacee.hasNoUsages();
             replacer.replace(replacee, returnValue, new DuplicateMapper(duplicates, replaceeGraph.start()));
 
             if (returnDuplicate.isAlive()) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -63,7 +63,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             return null;
         }
         if (GraphUtil.unproxify(array1) == GraphUtil.unproxify(array2)) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -43,6 +43,6 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        return usages().isEmpty() ? null : this;
+        return hasNoUsages() ? null : this;
     }
 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -47,7 +47,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             return null;
         } else {
             ValueNode param = arguments.get(0);
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java	Fri Jan 23 11:28:20 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java	Fri Jan 23 11:52:36 2015 +0100
@@ -226,7 +226,7 @@
 
     @Override
     public Node canonical(CanonicalizerTool tool) {
-        if (usages().isEmpty()) {
+        if (hasNoUsages()) {
             return null;
         } else {
             return this;