--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/TestIntrinsicCompiles.java 2017-04-28 11:48:54.000000000 +0200 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/TestIntrinsicCompiles.java 2017-04-28 11:48:54.000000000 +0200 @@ -22,13 +22,12 @@ */ package org.graalvm.compiler.hotspot.test; -import java.util.List; -import java.util.Set; +import static org.graalvm.compiler.core.common.CompilationIdentifier.INVALID_COMPILATION_ID; -import org.junit.Test; +import java.util.List; +import java.util.Map; import org.graalvm.compiler.api.test.Graal; -import org.graalvm.compiler.core.common.CompilationIdentifier; import org.graalvm.compiler.core.test.GraalCompilerTest; import org.graalvm.compiler.hotspot.HotSpotGraalCompiler; import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; @@ -37,8 +36,10 @@ import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins; import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin; import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins; +import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Binding; import org.graalvm.compiler.nodes.graphbuilderconf.MethodSubstitutionPlugin; import org.graalvm.compiler.runtime.RuntimeProvider; +import org.junit.Test; import jdk.vm.ci.hotspot.HotSpotVMConfigStore; import jdk.vm.ci.hotspot.VMIntrinsicMethod; @@ -50,46 +51,27 @@ */ public class TestIntrinsicCompiles extends GraalCompilerTest { - private static boolean match(ResolvedJavaMethod method, VMIntrinsicMethod intrinsic) { - if (intrinsic.name.equals(method.getName())) { - if (intrinsic.descriptor.equals(method.getSignature().toMethodDescriptor())) { - String declaringClass = method.getDeclaringClass().toClassName().replace('.', '/'); - if (declaringClass.equals(intrinsic.declaringClass)) { - return true; - } - } - } - return false; - } - - private static ResolvedJavaMethod findMethod(Set methods, VMIntrinsicMethod intrinsic) { - for (ResolvedJavaMethod method : methods) { - if (match(method, intrinsic)) { - return method; - } - } - return null; - } - @Test @SuppressWarnings("try") - public void test() { + public void test() throws ClassNotFoundException { HotSpotGraalCompiler compiler = (HotSpotGraalCompiler) JVMCI.getRuntime().getCompiler(); HotSpotGraalRuntimeProvider rt = (HotSpotGraalRuntimeProvider) Graal.getRequiredCapability(RuntimeProvider.class); HotSpotProviders providers = rt.getHostBackend().getProviders(); Plugins graphBuilderPlugins = providers.getGraphBuilderPlugins(); InvocationPlugins invocationPlugins = graphBuilderPlugins.getInvocationPlugins(); - Set pluginMethods = invocationPlugins.getMethods(); + Map> bindings = invocationPlugins.getBindings(true); HotSpotVMConfigStore store = rt.getVMConfig().getStore(); List intrinsics = store.getIntrinsics(); for (VMIntrinsicMethod intrinsic : intrinsics) { - ResolvedJavaMethod method = findMethod(pluginMethods, intrinsic); - if (method != null) { - InvocationPlugin plugin = invocationPlugins.lookupInvocation(method); - if (plugin instanceof MethodSubstitutionPlugin && !method.isNative()) { - StructuredGraph graph = compiler.getIntrinsicGraph(method, providers, CompilationIdentifier.INVALID_COMPILATION_ID); - getCode(method, graph); + InvocationPlugin plugin = CheckGraalIntrinsics.findPlugin(bindings, intrinsic); + if (plugin != null) { + if (plugin instanceof MethodSubstitutionPlugin) { + ResolvedJavaMethod method = CheckGraalIntrinsics.resolveIntrinsic(getMetaAccess(), intrinsic); + if (!method.isNative()) { + StructuredGraph graph = compiler.getIntrinsicGraph(method, providers, INVALID_COMPILATION_ID); + getCode(method, graph); + } } } }