# HG changeset patch # User Christian Wimmer # Date 1434080411 25200 # Node ID 40aff2bb18806488c8992462839bed38b8535a1b # Parent b09503284ac83d46a51128eb6e8ab0fd502838a0 Preserve stateBefore when creating newInstanceNode and newArrayNode during canonicalization diff -r b09503284ac8 -r 40aff2bb1880 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java Thu Jun 11 16:20:13 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java Thu Jun 11 20:40:11 2015 -0700 @@ -43,8 +43,8 @@ return length; } - public AbstractNewArrayNode(NodeClass c, Stamp stamp, ValueNode length, boolean fillContents) { - super(c, stamp, fillContents); + protected AbstractNewArrayNode(NodeClass c, Stamp stamp, ValueNode length, boolean fillContents, FrameState stateBefore) { + super(c, stamp, fillContents, stateBefore); this.length = length; } diff -r b09503284ac8 -r 40aff2bb1880 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java Thu Jun 11 16:20:13 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java Thu Jun 11 20:40:11 2015 -0700 @@ -43,8 +43,8 @@ public static final NodeClass TYPE = NodeClass.create(AbstractNewObjectNode.class); protected final boolean fillContents; - public AbstractNewObjectNode(NodeClass c, Stamp stamp, boolean fillContents) { - super(c, stamp); + protected AbstractNewObjectNode(NodeClass c, Stamp stamp, boolean fillContents, FrameState stateBefore) { + super(c, stamp, stateBefore); this.fillContents = fillContents; } diff -r b09503284ac8 -r 40aff2bb1880 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Thu Jun 11 16:20:13 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Thu Jun 11 20:40:11 2015 -0700 @@ -47,11 +47,11 @@ protected final Kind knownElementKind; public DynamicNewArrayNode(ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) { - this(TYPE, elementType, length, fillContents, knownElementKind); + this(TYPE, elementType, length, fillContents, knownElementKind, null); } - protected DynamicNewArrayNode(NodeClass c, ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) { - super(c, StampFactory.objectNonNull(), length, fillContents); + protected DynamicNewArrayNode(NodeClass c, ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind, FrameState stateBefore) { + super(c, StampFactory.objectNonNull(), length, fillContents, stateBefore); this.elementType = elementType; this.knownElementKind = knownElementKind; assert knownElementKind != Kind.Void && knownElementKind != Kind.Illegal; @@ -87,7 +87,7 @@ /** Hook for subclasses to instantiate a subclass of {@link NewArrayNode}. */ protected NewArrayNode createNewArrayNode(ResolvedJavaType type) { - return new NewArrayNode(type, length(), fillContents()); + return new NewArrayNode(type, length(), fillContents(), stateBefore()); } public static boolean throwsIllegalArgumentException(Class elementType) { diff -r b09503284ac8 -r 40aff2bb1880 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Thu Jun 11 16:20:13 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Thu Jun 11 20:40:11 2015 -0700 @@ -38,11 +38,11 @@ @Input ValueNode clazz; public DynamicNewInstanceNode(ValueNode clazz, boolean fillContents) { - this(TYPE, clazz, fillContents); + this(TYPE, clazz, fillContents, null); } - protected DynamicNewInstanceNode(NodeClass c, ValueNode clazz, boolean fillContents) { - super(c, StampFactory.objectNonNull(), fillContents); + protected DynamicNewInstanceNode(NodeClass c, ValueNode clazz, boolean fillContents, FrameState stateBefore) { + super(c, StampFactory.objectNonNull(), fillContents, stateBefore); this.clazz = clazz; } @@ -71,7 +71,7 @@ /** Hook for subclasses to instantiate a subclass of {@link NewInstanceNode}. */ protected NewInstanceNode createNewInstanceNode(ResolvedJavaType type) { - return new NewInstanceNode(type, fillContents()); + return new NewInstanceNode(type, fillContents(), stateBefore()); } public static boolean throwsInstantiationException(Class type) { diff -r b09503284ac8 -r 40aff2bb1880 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Thu Jun 11 16:20:13 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Thu Jun 11 20:40:11 2015 -0700 @@ -44,11 +44,15 @@ public static final NodeClass TYPE = NodeClass.create(NewArrayNode.class); public NewArrayNode(ResolvedJavaType elementType, ValueNode length, boolean fillContents) { - super(TYPE, StampFactory.exactNonNull(elementType.getArrayClass()), length, fillContents); + this(elementType, length, fillContents, null); } - protected NewArrayNode(NodeClass c, ResolvedJavaType elementType, ValueNode length, boolean fillContents) { - super(c, StampFactory.exactNonNull(elementType.getArrayClass()), length, fillContents); + public NewArrayNode(ResolvedJavaType elementType, ValueNode length, boolean fillContents, FrameState stateBefore) { + this(TYPE, elementType, length, fillContents, stateBefore); + } + + protected NewArrayNode(NodeClass c, ResolvedJavaType elementType, ValueNode length, boolean fillContents, FrameState stateBefore) { + super(c, StampFactory.exactNonNull(elementType.getArrayClass()), length, fillContents, stateBefore); } @NodeIntrinsic diff -r b09503284ac8 -r 40aff2bb1880 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Thu Jun 11 16:20:13 2015 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Thu Jun 11 20:40:11 2015 -0700 @@ -43,11 +43,15 @@ protected final ResolvedJavaType instanceClass; public NewInstanceNode(ResolvedJavaType type, boolean fillContents) { - this(TYPE, type, fillContents); + this(TYPE, type, fillContents, null); } - protected NewInstanceNode(NodeClass c, ResolvedJavaType type, boolean fillContents) { - super(c, StampFactory.exactNonNull(type), fillContents); + public NewInstanceNode(ResolvedJavaType type, boolean fillContents, FrameState stateBefore) { + this(TYPE, type, fillContents, stateBefore); + } + + protected NewInstanceNode(NodeClass c, ResolvedJavaType type, boolean fillContents, FrameState stateBefore) { + super(c, StampFactory.exactNonNull(type), fillContents, stateBefore); assert !type.isArray() && !type.isInterface() && !type.isPrimitive(); this.instanceClass = type; }