# HG changeset patch # User Tom Rodriguez # Date 1393393234 28800 # Node ID 39f5ea16e13a23cc4ceddde266515c4de28090c7 # Parent 9d864856336a5b896651f46d5fff6ccc6717bb47 don't directly access the arraylength of Constant objects diff -r 9d864856336a -r 39f5ea16e13a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- 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; - } } diff -r 9d864856336a -r 39f5ea16e13a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- 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) {