diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java @ 16174:5605c5e37a1e

use InvokeKind.Special for array methods
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Mon, 23 Jun 2014 18:02:29 -0700
parents f62cc9f09c7b
children 10c12d09a8d2 4bfe1359d98a
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Mon Jun 23 18:01:30 2014 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Mon Jun 23 18:02:29 2014 -0700
@@ -141,9 +141,12 @@
             ValueNode receiver = receiver();
             ResolvedJavaType type = StampTool.typeOrNull(receiver);
             if (type != null && (invoke().stateAfter() != null || invoke().stateDuring() != null)) {
-                // either the holder class is exact, or the receiver object has an exact type
+                /*
+                 * either the holder class is exact, or the receiver object has an exact type, or
+                 * it's an array type
+                 */
                 ResolvedJavaMethod resolvedMethod = type.resolveMethod(targetMethod, invoke().getContextType());
-                if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver))) {
+                if (resolvedMethod != null && (resolvedMethod.canBeStaticallyBound() || StampTool.isExactType(receiver) || type.isArray())) {
                     invokeKind = InvokeKind.Special;
                     targetMethod = resolvedMethod;
                     return this;