changeset 14020:39f5ea16e13a

don't directly access the arraylength of Constant objects
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Tue, 25 Feb 2014 21:40:34 -0800
parents 9d864856336a
children 740367295912 96946b41aae7
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java
diffstat 2 files changed, 3 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Tue Feb 25 13:13:40 2014 -0800
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Tue Feb 25 21:40:34 2014 -0800
@@ -22,7 +22,6 @@
  */
 package com.oracle.graal.nodes;
 
-import java.lang.reflect.*;
 import java.util.*;
 
 import com.oracle.graal.api.meta.*;
@@ -37,7 +36,7 @@
  * The {@code ConstantNode} represents a {@link Constant constant}.
  */
 @NodeInfo(shortName = "Const", nameTemplate = "Const({p#rawvalue})")
-public final class ConstantNode extends FloatingNode implements LIRLowerable, ArrayLengthProvider {
+public final class ConstantNode extends FloatingNode implements LIRLowerable {
 
     private static final DebugMetric ConstantNodes = Debug.metric("ConstantNodes");
 
@@ -356,14 +355,4 @@
             return super.toString(verbosity);
         }
     }
-
-    public ValueNode length() {
-        if (value.getKind().isObject()) {
-            Object object = value.asObject();
-            if (object != null && object.getClass().isArray()) {
-                return forIntegerKind(Kind.Int, Array.getLength(object), graph());
-            }
-        }
-        return null;
-    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Tue Feb 25 13:13:40 2014 -0800
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Tue Feb 25 21:40:34 2014 -0800
@@ -76,7 +76,8 @@
         }
         if (tool.canonicalizeReads()) {
             if (metaAccess != null && object != null && object.isConstant()) {
-                if (location.getLocationIdentity() == LocationIdentity.FINAL_LOCATION && location instanceof ConstantLocationNode) {
+                if ((location.getLocationIdentity() == LocationIdentity.FINAL_LOCATION || location.getLocationIdentity() == LocationIdentity.ARRAY_LENGTH_LOCATION) &
+                                location instanceof ConstantLocationNode) {
                     long displacement = ((ConstantLocationNode) location).getDisplacement();
                     Kind kind = location.getValueKind();
                     if (object.kind() == Kind.Object) {