< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/CompareNode.java
Print this page
rev 56282 : [mq]: graal
@@ -182,21 +182,29 @@
Condition realCondition = condition.asCondition();
if (mirrored) {
realCondition = realCondition.mirror();
}
return optimizeConditional(constant, (ConditionalNode) nonConstant, constantReflection, realCondition, unorderedIsTrue);
- } else if (nonConstant instanceof NormalizeCompareNode) {
- return optimizeNormalizeCompare(constantReflection, metaAccess, options, smallestCompareWidth, constant, (NormalizeCompareNode) nonConstant, mirrored, view);
+ } else if (nonConstant instanceof AbstractNormalizeCompareNode) {
+ return optimizeNormalizeCompare(constantReflection, metaAccess, options, smallestCompareWidth, constant, (AbstractNormalizeCompareNode) nonConstant, mirrored, view);
} else if (nonConstant instanceof ConvertNode) {
ConvertNode convert = (ConvertNode) nonConstant;
boolean multiUsage = (convert.asNode().hasMoreThanOneUsage() && convert.getValue().hasExactlyOneUsage());
- if ((convert instanceof ZeroExtendNode || convert instanceof SignExtendNode) && multiUsage) {
- // Do not perform for zero or sign extend if it could introduce
+ if (convert instanceof IntegerConvertNode && multiUsage) {
+ // Do not perform for integer convers if it could introduce
// new live values.
return null;
}
+ if (convert instanceof NarrowNode) {
+ NarrowNode narrowNode = (NarrowNode) convert;
+ if (narrowNode.getInputBits() > 32 && !constant.isDefaultForKind()) {
+ // Avoid large integer constants.
+ return null;
+ }
+ }
+
boolean supported = true;
if (convert.getValue().stamp(view) instanceof IntegerStamp) {
IntegerStamp intStamp = (IntegerStamp) convert.getValue().stamp(view);
supported = smallestCompareWidth != null && intStamp.getBits() >= smallestCompareWidth;
}
@@ -231,11 +239,11 @@
return null;
}
@SuppressWarnings("unused")
protected LogicNode optimizeNormalizeCompare(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth,
- Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored, NodeView view) {
+ Constant constant, AbstractNormalizeCompareNode normalizeNode, boolean mirrored, NodeView view) {
throw new PermanentBailoutException("NormalizeCompareNode connected to %s (%s %s %s)", this, constant, normalizeNode, mirrored);
}
private static LogicNode optimizeConditional(Constant constant, ConditionalNode conditionalNode, ConstantReflectionProvider constantReflection, Condition cond, boolean unorderedIsTrue) {
Constant trueConstant = conditionalNode.trueValue().asConstant();
< prev index next >