Mercurial > hg > truffle
changeset 4654:c3de4449719f
Don't emit moves for constants that are used only in frame states.
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Tue, 21 Feb 2012 16:35:42 +0100 |
parents | ac9ab44b75fd |
children | 70583f504107 f9811bcf3402 |
files | graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/ConstantNode.java |
diffstat | 1 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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)); }