< 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,202 **** 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 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 // new live values. 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; } --- 182,210 ---- Condition realCondition = condition.asCondition(); if (mirrored) { realCondition = realCondition.mirror(); } return optimizeConditional(constant, (ConditionalNode) nonConstant, constantReflection, realCondition, unorderedIsTrue); ! } 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 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,241 **** return null; } @SuppressWarnings("unused") protected LogicNode optimizeNormalizeCompare(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth, ! Constant constant, NormalizeCompareNode 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(); --- 239,249 ---- return null; } @SuppressWarnings("unused") protected LogicNode optimizeNormalizeCompare(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth, ! 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 >