# HG changeset patch # User Thomas Wuerthinger # Date 1329849084 -3600 # Node ID 70583f5041077f932018ca5623c47d5723e00824 # Parent 9ae5048b915391a4d9086707baa952ce1b79a304# Parent c3de4449719f291dbe4d6ae4fa4a44e561863425 Merge. diff -r 9ae5048b9153 -r 70583f504107 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalOptions.java --- 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; diff -r 9ae5048b9153 -r 70583f504107 graal/com.oracle.max.graal.debug/src/com/oracle/max/graal/debug/DebugDumpScope.java --- 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 + "]"; + } } diff -r 9ae5048b9153 -r 70583f504107 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 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)); } diff -r 9ae5048b9153 -r 70583f504107 graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/InvokeNode.java --- 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); } diff -r 9ae5048b9153 -r 70583f504107 graal/com.oracle.max.graal.nodes/src/com/oracle/max/graal/nodes/util/GraphUtil.java --- 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 usagesSnapshot = node.usages().filter(isA(FloatingNode.class).or(CallTargetNode.class)).snapshot(); + List 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 floatingInputs = node.inputs().filter(FloatingNode.class).snapshot(); + List 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); }