# HG changeset patch # User Roland Schatz # Date 1417102845 -3600 # Node ID fb558b41d34891d5393cee60cec2756b88089e7d # Parent b650870fe2fe47c53270f2e596ad73de44ee60f2 Propagate framestate when simplifying DynamicNewArray to NewArray. diff -r b650870fe2fe -r fb558b41d348 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 Nov 27 16:27:22 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Thu Nov 27 16:40:45 2014 +0100 @@ -63,13 +63,21 @@ return elementType; } + protected NewArrayNode forConstantType(ResolvedJavaType type) { + ValueNode len = length(); + NewArrayNode ret = graph().add(NewArrayNode.create(type, len.isAlive() ? len : graph().addOrUniqueWithInputs(len), fillContents())); + if (stateBefore() != null) { + ret.setStateBefore(stateBefore()); + } + return ret; + } + @Override public void simplify(SimplifierTool tool) { if (isAlive() && elementType.isConstant()) { ResolvedJavaType javaType = tool.getConstantReflection().asJavaType(elementType.asConstant()); if (javaType != null && !javaType.equals(tool.getMetaAccess().lookupJavaType(void.class))) { - ValueNode len = length(); - NewArrayNode newArray = graph().add(NewArrayNode.create(javaType, len.isAlive() ? len : graph().addOrUniqueWithInputs(len), fillContents())); + NewArrayNode newArray = forConstantType(javaType); List snapshot = inputs().snapshot(); graph().replaceFixedWithFixed(this, newArray); for (Node input : snapshot) {