diff -r 0152ad7b38b8 -r 6df94ce3ab2f 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); }