changeset 48861 | 47f19ff9903c |
parent 48190 | 25cfedf27edc |
child 49451 | e06f9607f370 |
48860:5bce1b7e7800 | 48861:47f19ff9903c |
---|---|
20 * or visit www.oracle.com if you need additional information or have any |
20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. |
21 * questions. |
22 */ |
22 */ |
23 package org.graalvm.compiler.nodes.calc; |
23 package org.graalvm.compiler.nodes.calc; |
24 |
24 |
25 import jdk.vm.ci.meta.ConstantReflectionProvider; |
25 import org.graalvm.compiler.core.common.calc.CanonicalCondition; |
26 import jdk.vm.ci.meta.MetaAccessProvider; |
|
27 import org.graalvm.compiler.core.common.calc.Condition; |
|
28 import org.graalvm.compiler.core.common.type.IntegerStamp; |
26 import org.graalvm.compiler.core.common.type.IntegerStamp; |
29 import org.graalvm.compiler.core.common.type.Stamp; |
27 import org.graalvm.compiler.core.common.type.Stamp; |
30 import org.graalvm.compiler.graph.NodeClass; |
28 import org.graalvm.compiler.graph.NodeClass; |
31 import org.graalvm.compiler.nodeinfo.NodeInfo; |
29 import org.graalvm.compiler.nodeinfo.NodeInfo; |
32 import org.graalvm.compiler.nodes.ConstantNode; |
30 import org.graalvm.compiler.nodes.ConstantNode; |
34 import org.graalvm.compiler.nodes.LogicNegationNode; |
32 import org.graalvm.compiler.nodes.LogicNegationNode; |
35 import org.graalvm.compiler.nodes.LogicNode; |
33 import org.graalvm.compiler.nodes.LogicNode; |
36 import org.graalvm.compiler.nodes.NodeView; |
34 import org.graalvm.compiler.nodes.NodeView; |
37 import org.graalvm.compiler.nodes.ValueNode; |
35 import org.graalvm.compiler.nodes.ValueNode; |
38 import org.graalvm.compiler.nodes.util.GraphUtil; |
36 import org.graalvm.compiler.nodes.util.GraphUtil; |
39 |
37 import org.graalvm.compiler.options.OptionValues; |
38 |
|
39 import jdk.vm.ci.meta.ConstantReflectionProvider; |
|
40 import jdk.vm.ci.meta.MetaAccessProvider; |
|
40 import jdk.vm.ci.meta.TriState; |
41 import jdk.vm.ci.meta.TriState; |
41 import org.graalvm.compiler.options.OptionValues; |
|
42 |
42 |
43 /** |
43 /** |
44 * Common super-class for "a < b" comparisons both {@linkplain IntegerLowerThanNode signed} and |
44 * Common super-class for "a < b" comparisons both {@linkplain IntegerLowerThanNode signed} and |
45 * {@linkplain IntegerBelowNode unsigned}. |
45 * {@linkplain IntegerBelowNode unsigned}. |
46 */ |
46 */ |
115 return getOp().tryFold(xStampGeneric, yStampGeneric); |
115 return getOp().tryFold(xStampGeneric, yStampGeneric); |
116 } |
116 } |
117 |
117 |
118 public abstract static class LowerOp extends CompareOp { |
118 public abstract static class LowerOp extends CompareOp { |
119 @Override |
119 @Override |
120 public LogicNode canonical(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth, Condition condition, |
120 public LogicNode canonical(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth, CanonicalCondition condition, |
121 boolean unorderedIsTrue, ValueNode forX, ValueNode forY, NodeView view) { |
121 boolean unorderedIsTrue, ValueNode forX, ValueNode forY, NodeView view) { |
122 LogicNode result = super.canonical(constantReflection, metaAccess, options, smallestCompareWidth, condition, unorderedIsTrue, forX, forY, view); |
122 LogicNode result = super.canonical(constantReflection, metaAccess, options, smallestCompareWidth, condition, unorderedIsTrue, forX, forY, view); |
123 if (result != null) { |
123 if (result != null) { |
124 return result; |
124 return result; |
125 } |
125 } |
154 |
154 |
155 protected abstract long maxValue(int bits); |
155 protected abstract long maxValue(int bits); |
156 |
156 |
157 protected abstract IntegerStamp forInteger(int bits, long min, long max); |
157 protected abstract IntegerStamp forInteger(int bits, long min, long max); |
158 |
158 |
159 protected abstract Condition getCondition(); |
159 protected abstract CanonicalCondition getCondition(); |
160 |
160 |
161 protected abstract IntegerLowerThanNode createNode(ValueNode x, ValueNode y); |
161 protected abstract IntegerLowerThanNode createNode(ValueNode x, ValueNode y); |
162 |
162 |
163 public LogicNode create(ValueNode x, ValueNode y, NodeView view) { |
163 public LogicNode create(ValueNode x, ValueNode y, NodeView view) { |
164 LogicNode result = CompareNode.tryConstantFoldPrimitive(getCondition(), x, y, false, view); |
164 LogicNode result = CompareNode.tryConstantFoldPrimitive(getCondition(), x, y, false, view); |