--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerLessThanNode.java Fri Dec 01 14:19:16 2017 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerLessThanNode.java Fri Dec 01 11:17:45 2017 -0800
@@ -40,6 +40,7 @@
import org.graalvm.compiler.nodes.LogicConstantNode;
import org.graalvm.compiler.nodes.LogicNegationNode;
import org.graalvm.compiler.nodes.LogicNode;
+import org.graalvm.compiler.nodes.NodeView;
import org.graalvm.compiler.nodes.ValueNode;
import jdk.vm.ci.code.CodeUtil;
@@ -60,22 +61,23 @@
assert !y.getStackKind().isNumericFloat() && y.getStackKind() != JavaKind.Object;
}
- public static LogicNode create(ValueNode x, ValueNode y) {
- return OP.create(x, y);
+ public static LogicNode create(ValueNode x, ValueNode y, NodeView view) {
+ return OP.create(x, y, view);
}
public static LogicNode create(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth,
- ValueNode x, ValueNode y) {
- LogicNode value = OP.canonical(constantReflection, metaAccess, options, smallestCompareWidth, OP.getCondition(), false, x, y);
+ ValueNode x, ValueNode y, NodeView view) {
+ LogicNode value = OP.canonical(constantReflection, metaAccess, options, smallestCompareWidth, OP.getCondition(), false, x, y, view);
if (value != null) {
return value;
}
- return create(x, y);
+ return create(x, y, view);
}
@Override
public Node canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
- ValueNode value = OP.canonical(tool.getConstantReflection(), tool.getMetaAccess(), tool.getOptions(), tool.smallestCompareWidth(), OP.getCondition(), false, forX, forY);
+ NodeView view = NodeView.from(tool);
+ ValueNode value = OP.canonical(tool.getConstantReflection(), tool.getMetaAccess(), tool.getOptions(), tool.smallestCompareWidth(), OP.getCondition(), false, forX, forY, view);
if (value != null) {
return value;
}
@@ -98,11 +100,11 @@
public static class LessThanOp extends LowerOp {
@Override
- protected CompareNode duplicateModified(ValueNode newX, ValueNode newY, boolean unorderedIsTrue) {
- if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) {
+ protected CompareNode duplicateModified(ValueNode newX, ValueNode newY, boolean unorderedIsTrue, NodeView view) {
+ if (newX.stamp(view) instanceof FloatStamp && newY.stamp(view) instanceof FloatStamp) {
return new FloatLessThanNode(newX, newY, unorderedIsTrue); // TODO: Is the last arg
// supposed to be true?
- } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) {
+ } else if (newX.stamp(view) instanceof IntegerStamp && newY.stamp(view) instanceof IntegerStamp) {
return new IntegerLessThanNode(newX, newY);
}
throw GraalError.shouldNotReachHere();
@@ -110,7 +112,7 @@
@Override
protected LogicNode optimizeNormalizeCompare(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth,
- Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) {
+ Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored, NodeView view) {
PrimitiveConstant primitive = (PrimitiveConstant) constant;
/* @formatter:off
* a NC b < c (not mirrored)
@@ -138,18 +140,18 @@
if (cst == 0) {
if (normalizeNode.getX().getStackKind() == JavaKind.Double || normalizeNode.getX().getStackKind() == JavaKind.Float) {
- return FloatLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, a, b, mirrored ^ normalizeNode.isUnorderedLess);
+ return FloatLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, a, b, mirrored ^ normalizeNode.isUnorderedLess, view);
} else {
- return IntegerLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, a, b);
+ return IntegerLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, a, b, view);
}
} else if (cst == 1) {
// a <= b <=> !(a > b)
LogicNode compare;
if (normalizeNode.getX().getStackKind() == JavaKind.Double || normalizeNode.getX().getStackKind() == JavaKind.Float) {
// since we negate, we have to reverse the unordered result
- compare = FloatLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, b, a, mirrored == normalizeNode.isUnorderedLess);
+ compare = FloatLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, b, a, mirrored == normalizeNode.isUnorderedLess, view);
} else {
- compare = IntegerLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, b, a);
+ compare = IntegerLessThanNode.create(constantReflection, metaAccess, options, smallestCompareWidth, b, a, view);
}
return LogicNegationNode.create(compare);
} else if (cst <= -1) {
@@ -161,13 +163,13 @@
}
@Override
- protected LogicNode findSynonym(ValueNode forX, ValueNode forY) {
- LogicNode result = super.findSynonym(forX, forY);
+ protected LogicNode findSynonym(ValueNode forX, ValueNode forY, NodeView view) {
+ LogicNode result = super.findSynonym(forX, forY, view);
if (result != null) {
return result;
}
- if (forX.stamp() instanceof IntegerStamp && forY.stamp() instanceof IntegerStamp) {
- if (IntegerStamp.sameSign((IntegerStamp) forX.stamp(), (IntegerStamp) forY.stamp())) {
+ if (forX.stamp(view) instanceof IntegerStamp && forY.stamp(view) instanceof IntegerStamp) {
+ if (IntegerStamp.sameSign((IntegerStamp) forX.stamp(view), (IntegerStamp) forY.stamp(view))) {
return new IntegerBelowNode(forX, forY);
}
}
@@ -188,8 +190,8 @@
}
if (xx != null) {
assert yy != null;
- IntegerStamp xStamp = (IntegerStamp) sub.getX().stamp();
- IntegerStamp yStamp = (IntegerStamp) sub.getY().stamp();
+ IntegerStamp xStamp = (IntegerStamp) sub.getX().stamp(view);
+ IntegerStamp yStamp = (IntegerStamp) sub.getY().stamp(view);
long minValue = CodeUtil.minValue(xStamp.getBits());
long maxValue = CodeUtil.maxValue(xStamp.getBits());
@@ -203,10 +205,10 @@
}
}
- if (forX.stamp() instanceof IntegerStamp) {
- assert forY.stamp() instanceof IntegerStamp;
- int bits = ((IntegerStamp) forX.stamp()).getBits();
- assert ((IntegerStamp) forY.stamp()).getBits() == bits;
+ if (forX.stamp(view) instanceof IntegerStamp) {
+ assert forY.stamp(view) instanceof IntegerStamp;
+ int bits = ((IntegerStamp) forX.stamp(view)).getBits();
+ assert ((IntegerStamp) forY.stamp(view)).getBits() == bits;
long min = OP.minValue(bits);
long xResidue = 0;
ValueNode left = null;
@@ -240,12 +242,12 @@
if (left == null) {
left = ConstantNode.forIntegerBits(bits, leftCst.asLong() - min);
} else if (xResidue != 0) {
- left = AddNode.create(left, ConstantNode.forIntegerBits(bits, xResidue));
+ left = AddNode.create(left, ConstantNode.forIntegerBits(bits, xResidue), view);
}
if (right == null) {
right = ConstantNode.forIntegerBits(bits, rightCst.asLong() - min);
} else if (yResidue != 0) {
- right = AddNode.create(right, ConstantNode.forIntegerBits(bits, yResidue));
+ right = AddNode.create(right, ConstantNode.forIntegerBits(bits, yResidue), view);
}
return new IntegerBelowNode(left, right);
}