# HG changeset patch # User Andreas Woess # Date 1329838542 -3600 # Node ID c3de4449719f291dbe4d6ae4fa4a44e561863425 # Parent ac9ab44b75fd60e84ab8ef39e620ffc60ca4bf18 Don't emit moves for constants that are used only in frame states. diff -r ac9ab44b75fd -r c3de4449719f graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/ConstantNode.java --- a/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/ConstantNode.java Tue Feb 21 16:18:48 2012 +0100 +++ b/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/ConstantNode.java Tue Feb 21 16:35:42 2012 +0100 @@ -25,6 +25,7 @@ import com.oracle.max.cri.ci.*; import com.oracle.max.cri.ri.*; import com.oracle.max.graal.graph.*; +import com.oracle.max.graal.graph.iterators.*; import com.oracle.max.graal.nodes.spi.*; import com.oracle.max.graal.nodes.type.*; @@ -52,13 +53,17 @@ @Override public void generate(LIRGeneratorTool gen) { - if (gen.canInlineConstant(value)) { + if (gen.canInlineConstant(value) || onlyUsedInFrameState()) { gen.setResult(this, value); } else { gen.setResult(this, gen.emitMove(value)); } } + private boolean onlyUsedInFrameState() { + return usages().filter(NodePredicates.isNotA(FrameState.class)).isEmpty(); + } + public static ConstantNode forCiConstant(CiConstant constant, RiRuntime runtime, Graph graph) { return graph.unique(new ConstantNode(constant, runtime)); }