diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java @ 11409:1f302b6e16b0

Introduce LogicNegationNode and remove Negatable interface.
author Roland Schatz <roland.schatz@oracle.com>
date Sat, 24 Aug 2013 14:38:11 +0200
parents 8185c119d731
children 446a94461d53
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java	Sat Aug 24 14:32:57 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java	Sat Aug 24 14:38:11 2013 +0200
@@ -34,7 +34,7 @@
  * The {@code ConditionalNode} class represents a comparison that yields one of two values. Note
  * that these nodes are not built directly from the bytecode but are introduced by canonicalization.
  */
-public final class ConditionalNode extends BinaryNode implements Canonicalizable, LIRLowerable, Negatable {
+public final class ConditionalNode extends BinaryNode implements Canonicalizable, LIRLowerable {
 
     @Input private LogicNode condition;
 
@@ -67,6 +67,11 @@
 
     @Override
     public ValueNode canonical(CanonicalizerTool tool) {
+        if (condition instanceof LogicNegationNode) {
+            LogicNegationNode negated = (LogicNegationNode) condition;
+            return graph().unique(new ConditionalNode(negated.getInput(), falseValue(), trueValue()));
+        }
+
         // this optimizes the case where a value that can only be 0 or 1 is materialized to 0 or 1
         if (x().isConstant() && y().isConstant() && condition instanceof IntegerEqualsNode) {
             IntegerEqualsNode equals = (IntegerEqualsNode) condition;
@@ -99,14 +104,6 @@
         generator.emitConditional(this);
     }
 
-    @Override
-    public Negatable negate(LogicNode cond) {
-        assert condition() == cond;
-        ConditionalNode replacement = graph().unique(new ConditionalNode(condition, falseValue(), trueValue()));
-        graph().replaceFloating(this, replacement);
-        return replacement;
-    }
-
     private ConditionalNode(Condition condition, ValueNode x, ValueNode y) {
         this(createCompareNode(condition, x, y));
     }