src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/ArrayLengthNode.java
changeset 50330 2cbc42a5764b
parent 47216 71c04702a3d5
child 50858 2d3e99a72541
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/ArrayLengthNode.java	Thu May 31 10:14:41 2018 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/ArrayLengthNode.java	Thu May 31 10:38:05 2018 -0700
@@ -33,10 +33,9 @@
 import org.graalvm.compiler.nodes.ConstantNode;
 import org.graalvm.compiler.nodes.FixedWithNextNode;
 import org.graalvm.compiler.nodes.ValueNode;
-import org.graalvm.compiler.nodes.ValueProxyNode;
+import org.graalvm.compiler.nodes.spi.ArrayLengthProvider;
 import org.graalvm.compiler.nodes.spi.Lowerable;
 import org.graalvm.compiler.nodes.spi.LoweringTool;
-import org.graalvm.compiler.nodes.spi.ValueProxy;
 import org.graalvm.compiler.nodes.spi.Virtualizable;
 import org.graalvm.compiler.nodes.spi.VirtualizerTool;
 import org.graalvm.compiler.nodes.util.GraphUtil;
@@ -91,38 +90,14 @@
     }
 
     /**
-     * Replicate the {@link ValueProxyNode}s from {@code originalValue} onto {@code value}.
-     *
-     * @param originalValue a possibly proxied value
-     * @param value a value needing proxies
-     * @return proxies wrapping {@code value}
-     */
-    private static ValueNode reproxyValue(ValueNode originalValue, ValueNode value) {
-        if (value.isConstant()) {
-            // No proxy needed
-            return value;
-        }
-        if (originalValue instanceof ValueProxyNode) {
-            ValueProxyNode proxy = (ValueProxyNode) originalValue;
-            return new ValueProxyNode(reproxyValue(proxy.getOriginalNode(), value), proxy.proxyPoint());
-        } else if (originalValue instanceof ValueProxy) {
-            ValueProxy proxy = (ValueProxy) originalValue;
-            return reproxyValue(proxy.getOriginalNode(), value);
-        } else {
-            return value;
-        }
-    }
-
-    /**
      * Gets the length of an array if possible.
      *
      * @return a node representing the length of {@code array} or null if it is not available
      */
     public static ValueNode readArrayLength(ValueNode originalArray, ConstantReflectionProvider constantReflection) {
-        ValueNode length = GraphUtil.arrayLength(originalArray);
+        ValueNode length = GraphUtil.arrayLength(originalArray, ArrayLengthProvider.FindLengthMode.CANONICALIZE_READ);
         if (length != null) {
-            // Ensure that any proxies on the original value end up on the length value
-            return reproxyValue(originalArray, length);
+            return length;
         }
         return readArrayLengthConstant(originalArray, constantReflection);
     }