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));
     }