# HG changeset patch # User Doug Simon # Date 1428483006 -7200 # Node ID 91a25b017111628a9ab7cb87c89b5988469c3de2 # Parent 9d4a365608331db711316cc48f8cb131bbfc4fc4 converted @MethodSubstitutions for java.lang.reflect.Array to MethodSubstitutionPlugins diff -r 9d4a36560833 -r 91a25b017111 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Wed Apr 08 10:46:46 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Wed Apr 08 10:50:06 2015 +0200 @@ -25,17 +25,14 @@ import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.replacements.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; /** * Substitutions for {@link java.lang.reflect.Array} methods. */ -@ClassSubstitution(java.lang.reflect.Array.class) public class ArraySubstitutions { - @MethodSubstitution public static Object newInstance(Class componentType, int length) throws NegativeArraySizeException { // The error cases must be handled here since DynamicNewArrayNode can only deoptimize the // caller in response to exceptions. @@ -48,7 +45,6 @@ return DynamicNewArrayNode.newArray(GuardingPiNode.asNonNullClass(componentType), length); } - @MethodSubstitution public static int getLength(Object array) { if (!array.getClass().isArray()) { DeoptimizeNode.deopt(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint); diff -r 9d4a36560833 -r 91a25b017111 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Wed Apr 08 10:46:46 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Wed Apr 08 10:50:06 2015 +0200 @@ -24,8 +24,6 @@ import static com.oracle.graal.compiler.common.GraalOptions.*; -import java.lang.reflect.*; - import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; @@ -40,7 +38,6 @@ public void registerReplacements(MetaAccessProvider metaAccess, LoweringProvider loweringProvider, SnippetReflectionProvider snippetReflection, Replacements replacements, TargetDescription target) { if (Intrinsify.getValue()) { - replacements.registerSubstitutions(Array.class, ArraySubstitutions.class); replacements.registerSubstitutions(String.class, StringSubstitutions.class); replacements.registerSubstitutions(Math.class, MathSubstitutionsX86.class); } diff -r 9d4a36560833 -r 91a25b017111 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Wed Apr 08 10:46:46 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Wed Apr 08 10:50:06 2015 +0200 @@ -24,6 +24,7 @@ import static com.oracle.graal.api.code.MemoryBarriers.*; +import java.lang.reflect.*; import java.util.*; import sun.misc.*; @@ -71,6 +72,7 @@ registerFloatPlugins(plugins); registerDoublePlugins(plugins); registerArraysPlugins(plugins); + registerArrayPlugins(plugins); registerUnsafePlugins(plugins); registerEdgesPlugins(metaAccess, plugins); registerGraalDirectivesPlugins(plugins); @@ -94,6 +96,12 @@ r.registerMethodSubstitution(ArraysSubstitutions.class, "equals", double[].class, double[].class); } + private static void registerArrayPlugins(InvocationPlugins plugins) { + Registration r = new Registration(plugins, Array.class); + r.registerMethodSubstitution(ArraySubstitutions.class, "newInstance", Class.class, int.class); + r.registerMethodSubstitution(ArraySubstitutions.class, "getLength", Object.class); + } + private static void registerUnsafePlugins(InvocationPlugins plugins) { Registration r = new Registration(plugins, Unsafe.class); for (Kind kind : Kind.values()) {