src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/ArrayLengthNode.java
--- 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);
}