# HG changeset patch # User Roland Schatz # Date 1393426431 -3600 # Node ID 3be1d30dd40f441396f3f424e2099a8f3c8d32ae # Parent 2b5b3fcd65ba82e5d97ca8ec12c6c0c27892792f Keep stamp when canonicalizing nodes to constants. diff -r 2b5b3fcd65ba -r 3be1d30dd40f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Feb 26 11:20:50 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Wed Feb 26 15:53:51 2014 +0100 @@ -151,6 +151,16 @@ } } + public static ConstantNode forConstant(Stamp stamp, Constant constant, MetaAccessProvider metaAccess, StructuredGraph graph) { + if (stamp instanceof PrimitiveStamp) { + return forPrimitive(stamp, constant, graph); + } else { + ConstantNode ret = forConstant(constant, metaAccess, graph); + assert ret.stamp().isCompatible(stamp); + return ret; + } + } + /** * Returns a node for a Java primitive. */ diff -r 2b5b3fcd65ba -r 3be1d30dd40f graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Wed Feb 26 11:20:50 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Wed Feb 26 15:53:51 2014 +0100 @@ -185,7 +185,7 @@ boolean improvedStamp = tryInferStamp(valueNode); Constant constant = valueNode.stamp().asConstant(); if (constant != null && !(node instanceof ConstantNode)) { - performReplacement(valueNode, ConstantNode.forConstant(constant, context.getMetaAccess(), valueNode.graph())); + performReplacement(valueNode, ConstantNode.forConstant(valueNode.stamp(), constant, context.getMetaAccess(), valueNode.graph())); } else if (improvedStamp) { // the improved stamp may enable additional canonicalization tryCanonicalize(valueNode, nodeClass);