changeset 18567:fb558b41d348

Propagate framestate when simplifying DynamicNewArray to NewArray.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 27 Nov 2014 16:40:45 +0100
parents b650870fe2fe
children c91f49e8d5ac
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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<Node> snapshot = inputs().snapshot();
                 graph().replaceFixedWithFixed(this, newArray);
                 for (Node input : snapshot) {