Mercurial > hg > truffle
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)); }