src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/CompareNode.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/CompareNode.java Tue Sep 24 08:54:08 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/CompareNode.java Tue Sep 24 12:47:15 2019 -0400
@@ -184,17 +184,25 @@
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);
@@ -233,7 +241,7 @@
@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);
}