changeset 4662:70583f504107

Merge.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Tue, 21 Feb 2012 19:31:24 +0100
parents 9ae5048b9153 (current diff) c3de4449719f (diff)
children 77a997c2bf4e
files
diffstat 5 files changed, 16 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java	Tue Feb 21 19:31:06 2012 +0100
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java	Tue Feb 21 19:31:24 2012 +0100
@@ -141,7 +141,7 @@
     public static boolean AssumeVerifiedBytecode             = true;
 
     // Code generator settings
-    public static boolean PropagateTypes                     = true;
+    public static boolean PropagateTypes                     = ____;
     public static boolean UseBranchPrediction                = true;
     public static boolean UseExceptionProbability            = true;
     public static boolean AllowExplicitExceptionChecks       = true;
--- a/graal/com.oracle.max.graal.debug/src/com/oracle/max/graal/debug/DebugDumpScope.java	Tue Feb 21 19:31:06 2012 +0100
+++ b/graal/com.oracle.max.graal.debug/src/com/oracle/max/graal/debug/DebugDumpScope.java	Tue Feb 21 19:31:24 2012 +0100
@@ -33,4 +33,9 @@
     public String getName() {
         return name;
     }
+
+    @Override
+    public String toString() {
+        return "DebugDumpScope[" + name + "]";
+    }
 }
--- a/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/ConstantNode.java	Tue Feb 21 19:31:06 2012 +0100
+++ b/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/ConstantNode.java	Tue Feb 21 19:31:24 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));
     }
--- a/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/InvokeNode.java	Tue Feb 21 19:31:06 2012 +0100
+++ b/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/InvokeNode.java	Tue Feb 21 19:31:24 2012 +0100
@@ -129,6 +129,7 @@
                 this.replaceAtPredecessors(node);
                 this.replaceAtUsages(null);
                 GraphUtil.killCFG(this);
+                return;
             } else {
                 ((StructuredGraph) graph()).replaceFixed(this, node);
             }
--- a/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/util/GraphUtil.java	Tue Feb 21 19:31:06 2012 +0100
+++ b/graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/util/GraphUtil.java	Tue Feb 21 19:31:24 2012 +0100
@@ -72,7 +72,7 @@
 
     public static void propagateKill(Node node) {
         if (node != null && node.isAlive()) {
-            List<Node> usagesSnapshot = node.usages().filter(isA(FloatingNode.class).or(CallTargetNode.class)).snapshot();
+            List<Node> usagesSnapshot = node.usages().filter(isA(FloatingNode.class).or(CallTargetNode.class).or(FrameState.class)).snapshot();
 
             // null out remaining usages
             node.replaceAtUsages(null);
@@ -92,10 +92,10 @@
     }
 
     public static void killUnusedFloatingInputs(Node node) {
-        List<FloatingNode> floatingInputs = node.inputs().filter(FloatingNode.class).snapshot();
+        List<Node> floatingInputs = node.inputs().filter(isA(FloatingNode.class).or(CallTargetNode.class).or(FrameState.class)).snapshot();
         node.safeDelete();
 
-        for (FloatingNode in : floatingInputs) {
+        for (Node in : floatingInputs) {
             if (in.isAlive() && in.usages().isEmpty()) {
                 killUnusedFloatingInputs(in);
             }