changeset 3527:391302094f86

Bug fixes in the Canonicalizer and in the Conditional node.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Tue, 09 Aug 2011 21:50:58 +0200
parents 40121bcd2efc
children 6b841b6b2437
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Conditional.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/If.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/CanonicalizerPhase.java
diffstat 4 files changed, 4 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java	Tue Aug 09 19:05:30 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java	Tue Aug 09 21:50:58 2011 +0200
@@ -227,19 +227,6 @@
                 }
             }
         }
-        boolean allUsagesNegate = true;
-        for (Node usage : usages()) {
-            if (!(usage instanceof NegateBooleanNode)) {
-                allUsagesNegate = false;
-                break;
-            }
-        }
-        if (allUsagesNegate) {
-            negate();
-            for (Node usage : usages().snapshot()) {
-                usage.replaceAtUsages(this);
-            }
-        }
         return this;
     }
 }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Conditional.java	Tue Aug 09 19:05:30 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Conditional.java	Tue Aug 09 21:50:58 2011 +0200
@@ -175,7 +175,7 @@
                 right = CiConstant.NULL_OBJECT;
                 cond = Condition.NE;
             } else if (condition instanceof Constant) {
-                generator.lir().move(generator.createResultVariable(conditional), condition.asConstant());
+                generator.lir().move(condition.asConstant(), generator.createResultVariable(conditional));
             } else if (condition instanceof InstanceOf) {
                 if (conditional instanceof MaterializeNode && !negate) {
                     generator.emitMaterializeInstanceOf((MaterializeNode) conditional, conditional, null);
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/If.java	Tue Aug 09 19:05:30 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/If.java	Tue Aug 09 21:50:58 2011 +0200
@@ -125,22 +125,10 @@
             EndNode trueEnd = (EndNode) trueSuccessor();
             EndNode falseEnd = (EndNode) falseSuccessor();
             Merge merge = trueEnd.merge();
-            if (merge == falseEnd.merge() && merge.phis().size() == 0) {
+            if (merge == falseEnd.merge() && merge.phis().size() == 0 && merge.endCount() == 2) {
                 FixedNode next = merge.next();
                 merge.setNext(null); // disconnect to avoid next from having 2 preds
-                if (compare().usages().size() == 1 && /* ifNode.compare().hasSideEffets() */true) { // TODO (gd) ifNode.compare().hasSideEffets() ?
-                    if (GraalOptions.TraceCanonicalizer) {
-                        TTY.println("> Useless if with side effects Canon'ed to guard");
-                    }
-                    ValueAnchor anchor = new ValueAnchor(compare(), graph());
-                    anchor.setNext(next);
-                    return anchor;
-                } else {
-                    if (GraalOptions.TraceCanonicalizer) {
-                        TTY.println("> Useless if Canon'ed away");
-                    }
-                    return next;
-                }
+                return next;
             }
         }
         return this;
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/CanonicalizerPhase.java	Tue Aug 09 19:05:30 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/CanonicalizerPhase.java	Tue Aug 09 21:50:58 2011 +0200
@@ -61,10 +61,10 @@
                 Node canonical = ((Canonicalizable) node).canonical(reProcess);
                 if (canonical != node) {
                     node.replaceAndDelete(canonical);
-                    nodeWorkList.replaced(canonical, node, false, EdgeType.USAGES);
                     for (Node newNode : graph.getNewNodes()) {
                         nodeWorkList.add(newNode);
                     }
+                    nodeWorkList.replaced(canonical, node, false, EdgeType.USAGES);
                     GraalMetrics.NodesCanonicalized++;
                 }
             }