changeset 5669:21e8f6b5a7d1

Scope the replacement code in Canonicalizer into the CanonicalizeNode scope
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 20 Jun 2012 16:55:39 +0200
parents fa1e6d1cc291
children 29684ae5a194
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CanonicalizerPhase.java
diffstat 1 files changed, 40 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CanonicalizerPhase.java	Wed Jun 20 16:55:08 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/CanonicalizerPhase.java	Wed Jun 20 16:55:39 2012 +0200
@@ -22,8 +22,6 @@
  */
 package com.oracle.graal.compiler.phases;
 
-import java.util.concurrent.*;
-
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.debug.*;
@@ -164,14 +162,12 @@
         return false;
     }
 
-    public static void tryCanonicalize(final Node node, StructuredGraph graph, final SimplifierTool tool) {
+    public static void tryCanonicalize(final Node node, final StructuredGraph graph, final SimplifierTool tool) {
         if (node instanceof Canonicalizable) {
             METRIC_CANONICALIZATION_CONSIDERED_NODES.increment();
-            ValueNode canonical = Debug.scope("CanonicalizeNode", node, new Callable<ValueNode>() {
-                public ValueNode call() throws Exception {
-                    return ((Canonicalizable) node).canonical(tool);
-                }
-            });
+            Debug.scope("CanonicalizeNode", node, new Runnable() {
+                public void run() {
+                    ValueNode canonical = ((Canonicalizable) node).canonical(tool);
 //     cases:                                           original node:
 //                                         |Floating|Fixed-unconnected|Fixed-connected|
 //                                         --------------------------------------------
@@ -184,45 +180,47 @@
 //                          Fixed-connected|   2    |        X        |       6       |
 //                                         --------------------------------------------
 //       X: must not happen (checked with assertions)
-            if (canonical == node) {
-                Debug.log("Canonicalizer: work on %s", node);
-            } else {
-                Debug.log("Canonicalizer: replacing %s with %s", node, canonical);
-
-                METRIC_CANONICALIZED_NODES.increment();
-                if (node instanceof FloatingNode) {
-                    if (canonical == null) {
-                        // case 1
-                        graph.removeFloating((FloatingNode) node);
+                    if (canonical == node) {
+                        Debug.log("Canonicalizer: work on %s", node);
                     } else {
-                        // case 2
-                        assert !(canonical instanceof FixedNode) || canonical.predecessor() != null : node + " -> " + canonical +
-                                        " : replacement should be floating or fixed and connected";
-                        graph.replaceFloating((FloatingNode) node, canonical);
-                    }
-                } else {
-                    assert node instanceof FixedWithNextNode && node.predecessor() != null : node + " -> " + canonical + " : node should be fixed & connected (" + node.predecessor() + ")";
-                    if (canonical == null) {
-                        // case 3
-                        graph.removeFixed((FixedWithNextNode) node);
-                    } else if (canonical instanceof FloatingNode) {
-                        // case 4
-                        graph.replaceFixedWithFloating((FixedWithNextNode) node, (FloatingNode) canonical);
-                    } else {
-                        assert canonical instanceof FixedNode;
-                        if (canonical.predecessor() == null) {
-                            assert !canonical.cfgSuccessors().iterator().hasNext() : "replacement " + canonical + " shouldn't have successors";
-                            // case 5
-                            graph.replaceFixedWithFixed((FixedWithNextNode) node, (FixedWithNextNode) canonical);
+                        Debug.log("Canonicalizer: replacing %s with %s", node, canonical);
+
+                        METRIC_CANONICALIZED_NODES.increment();
+                        if (node instanceof FloatingNode) {
+                            if (canonical == null) {
+                                // case 1
+                                graph.removeFloating((FloatingNode) node);
+                            } else {
+                                // case 2
+                                assert !(canonical instanceof FixedNode) || canonical.predecessor() != null : node + " -> " + canonical +
+                                                " : replacement should be floating or fixed and connected";
+                                graph.replaceFloating((FloatingNode) node, canonical);
+                            }
                         } else {
-                            assert canonical.cfgSuccessors().iterator().hasNext() : "replacement " + canonical + " should have successors";
-                            // case 6
-                            node.replaceAtUsages(canonical);
-                            graph.removeFixed((FixedWithNextNode) node);
+                            assert node instanceof FixedWithNextNode && node.predecessor() != null : node + " -> " + canonical + " : node should be fixed & connected (" + node.predecessor() + ")";
+                            if (canonical == null) {
+                                // case 3
+                                graph.removeFixed((FixedWithNextNode) node);
+                            } else if (canonical instanceof FloatingNode) {
+                                // case 4
+                                graph.replaceFixedWithFloating((FixedWithNextNode) node, (FloatingNode) canonical);
+                            } else {
+                                assert canonical instanceof FixedNode;
+                                if (canonical.predecessor() == null) {
+                                    assert !canonical.cfgSuccessors().iterator().hasNext() : "replacement " + canonical + " shouldn't have successors";
+                                    // case 5
+                                    graph.replaceFixedWithFixed((FixedWithNextNode) node, (FixedWithNextNode) canonical);
+                                } else {
+                                    assert canonical.cfgSuccessors().iterator().hasNext() : "replacement " + canonical + " should have successors";
+                                    // case 6
+                                    node.replaceAtUsages(canonical);
+                                    graph.removeFixed((FixedWithNextNode) node);
+                                }
+                            }
                         }
                     }
                 }
-            }
+            });
         } else if (node instanceof Simplifiable) {
             Debug.log("Canonicalizer: simplifying %s", node);
             METRIC_SIMPLIFICATION_CONSIDERED_NODES.increment();