src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerConvertNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerConvertNode.java	Mon Mar 20 17:40:37 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerConvertNode.java	Mon Mar 20 17:40:37 2017

*** 26,53 **** --- 26,55 ---- import java.util.function.Function; import org.graalvm.compiler.core.common.type.ArithmeticOpTable; import org.graalvm.compiler.core.common.type.ArithmeticOpTable.IntegerConvertOp; import org.graalvm.compiler.core.common.type.IntegerStamp; + import org.graalvm.compiler.core.common.type.PrimitiveStamp; import org.graalvm.compiler.core.common.type.Stamp; import org.graalvm.compiler.graph.NodeClass; import org.graalvm.compiler.graph.spi.CanonicalizerTool; import org.graalvm.compiler.nodeinfo.NodeInfo; import org.graalvm.compiler.nodes.ArithmeticOperation; import org.graalvm.compiler.nodes.ConstantNode; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.nodes.ValueNode; import org.graalvm.compiler.nodes.spi.ArithmeticLIRLowerable; + import org.graalvm.compiler.nodes.spi.StampInverter; import jdk.vm.ci.meta.Constant; import jdk.vm.ci.meta.ConstantReflectionProvider; /** * An {@code IntegerConvert} converts an integer to an integer of different width. */ @NodeInfo ! public abstract class IntegerConvertNode<OP, REV> extends UnaryNode implements ArithmeticOperation, ConvertNode, ArithmeticLIRLowerable, StampInverter { @SuppressWarnings("rawtypes") public static final NodeClass<IntegerConvertNode> TYPE = NodeClass.create(IntegerConvertNode.class); protected final SerializableIntegerConvertFunction<OP> getOp; protected final SerializableIntegerConvertFunction<REV> getReverseOp;
*** 62,71 **** --- 64,74 ---- super(c, getOp.apply(ArithmeticOpTable.forStamp(input.stamp())).foldStamp(inputBits, resultBits, input.stamp()), input); this.getOp = getOp; this.getReverseOp = getReverseOp; this.inputBits = inputBits; this.resultBits = resultBits; + assert ((PrimitiveStamp) input.stamp()).getBits() == inputBits; } public int getInputBits() { return inputBits; }
*** 144,159 **** --- 147,167 ---- result = input; } else if (toStamp.getBits() < fromStamp.getBits()) { result = new NarrowNode(input, fromStamp.getBits(), toStamp.getBits()); } else if (zeroExtend) { // toStamp.getBits() > fromStamp.getBits() ! result = new ZeroExtendNode(input, toStamp.getBits()); ! result = ZeroExtendNode.create(input, toStamp.getBits()); } else { // toStamp.getBits() > fromStamp.getBits() ! result = new SignExtendNode(input, toStamp.getBits()); ! result = SignExtendNode.create(input, toStamp.getBits()); } IntegerStamp resultStamp = (IntegerStamp) result.stamp(); assert toStamp.getBits() == resultStamp.getBits(); return result; } + + @Override + public Stamp invertStamp(Stamp outStamp) { + return getArithmeticOp().invertStamp(inputBits, resultBits, outStamp); + } }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerConvertNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File