# 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) {