# HG changeset patch # User Thomas Wuerthinger # Date 1381332389 -7200 # Node ID 506d4520435d08f11dbfb86cb9685f7072dac8de # Parent 0fa39f034839d72ce4c0191e678af384c36ed3f8 Do not emit code for constants in virtual state. diff -r 0fa39f034839 -r 506d4520435d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Tue Oct 08 23:14:53 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Oct 09 17:26:29 2013 +0200 @@ -26,10 +26,10 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; -import com.oracle.graal.graph.iterators.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; +import com.oracle.graal.nodes.virtual.*; /** * The {@code ConstantNode} represents a constant such as an integer value, long, float, object @@ -57,15 +57,24 @@ @Override public void generate(LIRGeneratorTool gen) { - if (gen.canInlineConstant(value) || onlyUsedInFrameState()) { + if (gen.canInlineConstant(value) || onlyUsedInVirtualState()) { gen.setResult(this, value); } else { gen.setResult(this, gen.emitMove(value)); } } - private boolean onlyUsedInFrameState() { - return usages().filter(NodePredicates.isNotA(FrameState.class)).isEmpty(); + private boolean onlyUsedInVirtualState() { + for (Node n : this.usages()) { + if (n instanceof FrameState) { + // Only frame state usages. + } else if (n instanceof VirtualState) { + // Only virtual usage. + } else { + return false; + } + } + return true; } public static ConstantNode forConstant(Constant constant, MetaAccessProvider runtime, Graph graph) {