changeset 21897:ff5074d1fc07

Ensure CheckCast used for store check is canonicalized if possible
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Wed, 10 Jun 2015 11:51:16 +0200
parents 217b681df88f
children 6714387f5323
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Wed Jun 10 16:06:52 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Wed Jun 10 11:51:16 2015 +0200
@@ -253,9 +253,13 @@
             if (arrayType != null && StampTool.isExactType(array)) {
                 ResolvedJavaType elementType = arrayType.getComponentType();
                 if (!elementType.isJavaLangObject()) {
-                    checkCastNode = graph.add(new CheckCastNode(elementType, value, null, true));
-                    graph.addBeforeFixed(storeIndexed, checkCastNode);
-                    value = checkCastNode;
+                    ValueNode storeCheck = CheckCastNode.create(elementType, value, null, true, graph.getAssumptions());
+                    if (storeCheck.graph() == null) {
+                        checkCastNode = (CheckCastNode) storeCheck;
+                        checkCastNode = graph.add(checkCastNode);
+                        graph.addBeforeFixed(storeIndexed, checkCastNode);
+                    }
+                    value = storeCheck;
                 }
             } else {
                 ValueNode arrayClass = createReadHub(graph, array, boundsCheck);