# HG changeset patch # User Gilles Duboscq # Date 1400491147 -7200 # Node ID 45285c8eccbd1aaf61038c1b93a86fa32c2a4d8b # Parent 4f32154c34ffc81b9e461dc4a419011ae8703799 Never use the current node's stamp in ValueNode.inferStamp overrides. Removed unused PhiNode.inferPhiStamp diff -r 4f32154c34ff -r 45285c8eccbd graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Mon May 19 11:59:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Mon May 19 11:19:07 2014 +0200 @@ -38,10 +38,12 @@ public class GuardedValueNode extends FloatingGuardedNode implements LIRLowerable, Virtualizable, IterableNodeType, Canonicalizable, ValueProxy { @Input private ValueNode object; + private final Stamp piStamp; public GuardedValueNode(ValueNode object, GuardingNode guard, Stamp stamp) { super(stamp, guard); this.object = object; + this.piStamp = stamp; } public GuardedValueNode(ValueNode object, GuardingNode guard) { @@ -61,10 +63,10 @@ @Override public boolean inferStamp() { - if (stamp() instanceof ObjectStamp && object().stamp() instanceof ObjectStamp) { - return updateStamp(((ObjectStamp) object().stamp()).castTo((ObjectStamp) stamp())); + if (piStamp instanceof ObjectStamp && object().stamp() instanceof ObjectStamp) { + return updateStamp(((ObjectStamp) object().stamp()).castTo((ObjectStamp) piStamp)); } - return updateStamp(object().stamp().join(stamp())); + return updateStamp(object().stamp().join(piStamp)); } @Override diff -r 4f32154c34ff -r 45285c8eccbd graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Mon May 19 11:59:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java Mon May 19 11:19:07 2014 +0200 @@ -41,6 +41,7 @@ @Input(InputType.Condition) private LogicNode condition; private final DeoptimizationReason reason; private final DeoptimizationAction action; + private final Stamp piStamp; private boolean negated; public ValueNode object() { @@ -81,6 +82,7 @@ public GuardingPiNode(ValueNode object, ValueNode condition, boolean negateCondition, DeoptimizationReason reason, DeoptimizationAction action, Stamp stamp) { super(stamp); assert stamp != null; + this.piStamp = stamp; this.object = object; this.condition = (LogicNode) condition; this.reason = reason; @@ -107,7 +109,7 @@ @Override public boolean inferStamp() { - return updateStamp(stamp().join(object().stamp())); + return updateStamp(piStamp.join(object().stamp())); } @Override diff -r 4f32154c34ff -r 45285c8eccbd graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Mon May 19 11:59:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Mon May 19 11:19:07 2014 +0200 @@ -43,6 +43,7 @@ public class PiNode extends FloatingGuardedNode implements LIRLowerable, Virtualizable, IterableNodeType, Canonicalizable, ValueProxy { @Input private ValueNode object; + private final Stamp piStamp; public ValueNode object() { return object; @@ -50,12 +51,14 @@ public PiNode(ValueNode object, Stamp stamp) { super(stamp); + this.piStamp = stamp; this.object = object; } public PiNode(ValueNode object, Stamp stamp, ValueNode anchor) { super(stamp, (GuardingNode) anchor); this.object = object; + this.piStamp = stamp; } public PiNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { @@ -71,13 +74,13 @@ @Override public boolean inferStamp() { - if (stamp() == StampFactory.forNodeIntrinsic()) { + if (piStamp == StampFactory.forNodeIntrinsic()) { return false; } - if (stamp() instanceof ObjectStamp && object.stamp() instanceof ObjectStamp) { - return updateStamp(((ObjectStamp) object.stamp()).castTo((ObjectStamp) stamp())); + if (piStamp instanceof ObjectStamp && object.stamp() instanceof ObjectStamp) { + return updateStamp(((ObjectStamp) object.stamp()).castTo((ObjectStamp) piStamp)); } - return updateStamp(stamp().join(object().stamp())); + return updateStamp(piStamp.join(object().stamp())); } @Override diff -r 4f32154c34ff -r 45285c8eccbd graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java Mon May 19 11:59:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java Mon May 19 11:19:07 2014 +0200 @@ -54,10 +54,6 @@ @Override public boolean inferStamp() { - return inferPhiStamp(); - } - - public boolean inferPhiStamp() { return updateStamp(StampTool.meet(values())); } } diff -r 4f32154c34ff -r 45285c8eccbd graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon May 19 11:59:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Mon May 19 11:19:07 2014 +0200 @@ -132,8 +132,9 @@ @Override public boolean inferStamp() { - if (stamp() instanceof ObjectStamp && object().stamp() instanceof ObjectStamp) { - return updateStamp(((ObjectStamp) object().stamp()).castTo((ObjectStamp) stamp())); + if (object().stamp() instanceof ObjectStamp) { + ObjectStamp castStamp = (ObjectStamp) StampFactory.declared(type); + return updateStamp(((ObjectStamp) object().stamp()).castTo(castStamp)); } return false; } diff -r 4f32154c34ff -r 45285c8eccbd graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java Mon May 19 11:59:54 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java Mon May 19 11:19:07 2014 +0200 @@ -191,8 +191,8 @@ * {@link com.oracle.graal.phases.common.cfs.FlowSensitiveReduction} determined to be * unreachable will be eliminated by canonicalization and dead code elimination. For now they * still exist, thus polluting the result of - * {@link com.oracle.graal.nodes.ValuePhiNode#inferPhiStamp()} but we are careful to skip them - * when merging type-witnesses and known-null maps. + * {@link com.oracle.graal.nodes.ValuePhiNode#inferStamp()} but we are careful to skip them when + * merging type-witnesses and known-null maps. *

*/ private void mergePhis(MergeNode merge, List withStates, Map newKnownPhiTypes) {