Mercurial > hg > truffle
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java @ 7767:4a6646d8eb87
separate BooleanNode and ConstantNode hierarchy, rename BooleanNode to LogicNode and LogicNode to BitLogicNode
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Mon, 11 Feb 2013 15:55:27 +0100 |
parents | 5e3d1a68664e |
children | 7b88c5e5cbd4 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Mon Feb 11 10:46:48 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Mon Feb 11 15:55:27 2013 +0100 @@ -26,7 +26,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; /* TODO (thomaswue/gdub) For high-level optimization purpose the compare node should be a boolean *value* (it is currently only a helper node) * But in the back-end the comparison should not always be materialized (for example in x86 the comparison result will not be in a register but in a flag) @@ -34,7 +33,7 @@ * Compare should probably be made a value (so that it can be canonicalized for example) and in later stages some Compare usage should be transformed * into variants that do not materialize the value (CompareIf, CompareGuard...) */ -public abstract class CompareNode extends BooleanNode implements Canonicalizable, LIRLowerable { +public abstract class CompareNode extends LogicNode implements Canonicalizable, LIRLowerable { @Input private ValueNode x; @Input private ValueNode y; @@ -54,7 +53,6 @@ * @param y the instruction that produces the second input to this instruction */ public CompareNode(ValueNode x, ValueNode y) { - super(StampFactory.condition()); assert (x == null && y == null) || x.kind() == y.kind(); this.x = x; this.y = y; @@ -78,7 +76,7 @@ public void generate(LIRGeneratorTool gen) { } - private ValueNode optimizeConditional(Constant constant, ConditionalNode conditionalNode, MetaAccessProvider runtime, Condition cond) { + private LogicNode optimizeConditional(Constant constant, ConditionalNode conditionalNode, MetaAccessProvider runtime, Condition cond) { Constant trueConstant = conditionalNode.trueValue().asConstant(); Constant falseConstant = conditionalNode.falseValue().asConstant(); @@ -87,7 +85,7 @@ boolean falseResult = cond.foldCondition(falseConstant, constant, runtime, unorderedIsTrue()); if (trueResult == falseResult) { - return ConstantNode.forBoolean(trueResult, graph()); + return LogicConstantNode.forBoolean(trueResult, graph()); } else { if (trueResult) { assert falseResult == false; @@ -103,13 +101,14 @@ return this; } - protected ValueNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { + protected LogicNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { throw new GraalInternalError("NormalizeCompareNode connected to %s (%s %s %s)", this, constant, normalizeNode, mirrored); } - public ValueNode canonical(CanonicalizerTool tool) { + @Override + public LogicNode canonical(CanonicalizerTool tool) { if (x().isConstant() && y().isConstant() && tool.runtime() != null) { - return ConstantNode.forBoolean(condition().foldCondition(x().asConstant(), y().asConstant(), tool.runtime(), unorderedIsTrue()), graph()); + return LogicConstantNode.forBoolean(condition().foldCondition(x().asConstant(), y().asConstant(), tool.runtime(), unorderedIsTrue()), graph()); } if (x().isConstant()) { if (y() instanceof ConditionalNode) {