changeset 9499:e37aca5c2062

only virtualize StoreIndexedNode if no store check is required
author Lukas Stadler <lukas.stadler@jku.at>
date Mon, 29 Apr 2013 10:12:37 +0200
parents d0b3fa50e306
children 9cc37ce426cc
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java	Tue Apr 30 13:25:05 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java	Mon Apr 29 10:12:37 2013 +0200
@@ -73,8 +73,11 @@
             ValueNode indexValue = tool.getReplacedValue(index());
             int index = indexValue.isConstant() ? indexValue.asConstant().asInt() : -1;
             if (index >= 0 && index < arrayState.getVirtualObject().entryCount()) {
-                tool.setVirtualEntry(arrayState, index, value());
-                tool.delete();
+                ResolvedJavaType componentType = arrayState.getVirtualObject().type().getComponentType();
+                if (componentType.isPrimitive() || value.objectStamp().alwaysNull() || componentType.isAssignableFrom(value.objectStamp().type())) {
+                    tool.setVirtualEntry(arrayState, index, value());
+                    tool.delete();
+                }
             }
         }
     }