68 }
69
70 @Override
71 public Node canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
72 NodeView view = NodeView.from(tool);
73 ValueNode value = OP.canonical(tool.getConstantReflection(), tool.getMetaAccess(), tool.getOptions(), tool.smallestCompareWidth(), OP.getCondition(), false, forX, forY, view);
74 if (value != null) {
75 return value;
76 }
77 return this;
78 }
79
80 public static class BelowOp extends LowerOp {
81 @Override
82 protected CompareNode duplicateModified(ValueNode newX, ValueNode newY, boolean unorderedIsTrue, NodeView view) {
83 assert newX.stamp(NodeView.DEFAULT) instanceof IntegerStamp && newY.stamp(NodeView.DEFAULT) instanceof IntegerStamp;
84 return new IntegerBelowNode(newX, newY);
85 }
86
87 @Override
88 protected long upperBound(IntegerStamp stamp) {
89 return stamp.unsignedUpperBound();
90 }
91
92 @Override
93 protected long lowerBound(IntegerStamp stamp) {
94 return stamp.unsignedLowerBound();
95 }
96
97 @Override
98 protected int compare(long a, long b) {
99 return Long.compareUnsigned(a, b);
100 }
101
102 @Override
103 protected long min(long a, long b) {
104 return NumUtil.minUnsigned(a, b);
105 }
106
107 @Override
|
68 }
69
70 @Override
71 public Node canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
72 NodeView view = NodeView.from(tool);
73 ValueNode value = OP.canonical(tool.getConstantReflection(), tool.getMetaAccess(), tool.getOptions(), tool.smallestCompareWidth(), OP.getCondition(), false, forX, forY, view);
74 if (value != null) {
75 return value;
76 }
77 return this;
78 }
79
80 public static class BelowOp extends LowerOp {
81 @Override
82 protected CompareNode duplicateModified(ValueNode newX, ValueNode newY, boolean unorderedIsTrue, NodeView view) {
83 assert newX.stamp(NodeView.DEFAULT) instanceof IntegerStamp && newY.stamp(NodeView.DEFAULT) instanceof IntegerStamp;
84 return new IntegerBelowNode(newX, newY);
85 }
86
87 @Override
88 protected LogicNode findSynonym(ValueNode forX, ValueNode forY, NodeView view) {
89 LogicNode result = super.findSynonym(forX, forY, view);
90 if (result != null) {
91 return result;
92 }
93 if (forX.stamp(view) instanceof IntegerStamp) {
94 assert forY.stamp(view) instanceof IntegerStamp;
95 int bits = ((IntegerStamp) forX.stamp(view)).getBits();
96 assert ((IntegerStamp) forY.stamp(view)).getBits() == bits;
97 LogicNode logic = canonicalizeRangeFlip(forX, forY, bits, false, view);
98 if (logic != null) {
99 return logic;
100 }
101 }
102 return null;
103 }
104
105 @Override
106 protected long upperBound(IntegerStamp stamp) {
107 return stamp.unsignedUpperBound();
108 }
109
110 @Override
111 protected long lowerBound(IntegerStamp stamp) {
112 return stamp.unsignedLowerBound();
113 }
114
115 @Override
116 protected int compare(long a, long b) {
117 return Long.compareUnsigned(a, b);
118 }
119
120 @Override
121 protected long min(long a, long b) {
122 return NumUtil.minUnsigned(a, b);
123 }
124
125 @Override
|