< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java

Print this page

        

*** 27,58 **** import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; - import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; - import org.junit.Test; - import org.graalvm.compiler.api.test.Graal; import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; import org.graalvm.compiler.hotspot.meta.HotSpotProviders; 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.runtime.RuntimeProvider; import org.graalvm.compiler.test.GraalTest; import jdk.vm.ci.hotspot.HotSpotVMConfigStore; import jdk.vm.ci.hotspot.VMIntrinsicMethod; import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod; import jdk.vm.ci.meta.ResolvedJavaMethod; /** * Checks the set of intrinsics implemented by Graal against the set of intrinsics declared by --- 27,58 ---- import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; import org.graalvm.compiler.api.test.Graal; import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider; import org.graalvm.compiler.hotspot.meta.HotSpotProviders; 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.runtime.RuntimeProvider; import org.graalvm.compiler.test.GraalTest; + import org.junit.Test; import jdk.vm.ci.hotspot.HotSpotVMConfigStore; import jdk.vm.ci.hotspot.VMIntrinsicMethod; import jdk.vm.ci.meta.MetaAccessProvider; + import jdk.vm.ci.meta.MetaUtil; import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod; import jdk.vm.ci.meta.ResolvedJavaMethod; /** * Checks the set of intrinsics implemented by Graal against the set of intrinsics declared by
*** 61,92 **** * {@link #TO_BE_INVESTIGATED} and either implementing the intrinsic or moving it to {@link #IGNORE} * . */ public class CheckGraalIntrinsics extends GraalTest { ! public 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<ResolvedJavaMethod> methods, VMIntrinsicMethod intrinsic) { ! for (ResolvedJavaMethod method : methods) { ! if (match(method, intrinsic)) { ! return method; } } return null; } ! private static ResolvedJavaMethod resolveIntrinsic(MetaAccessProvider metaAccess, VMIntrinsicMethod intrinsic) throws ClassNotFoundException { Class<?> c = Class.forName(intrinsic.declaringClass.replace('/', '.'), false, CheckGraalIntrinsics.class.getClassLoader()); for (Method javaMethod : c.getDeclaredMethods()) { if (javaMethod.getName().equals(intrinsic.name)) { ResolvedJavaMethod method = metaAccess.lookupJavaMethod(javaMethod); if (intrinsic.descriptor.equals("*")) { --- 61,95 ---- * {@link #TO_BE_INVESTIGATED} and either implementing the intrinsic or moving it to {@link #IGNORE} * . */ public class CheckGraalIntrinsics extends GraalTest { ! public static boolean match(String type, Binding binding, VMIntrinsicMethod intrinsic) { ! if (intrinsic.name.equals(binding.name)) { ! if (intrinsic.descriptor.startsWith(binding.argumentsDescriptor)) { ! if (type.equals(intrinsic.declaringClass)) { return true; } } } return false; } ! public static InvocationPlugin findPlugin(Map<String, List<Binding>> bindings, VMIntrinsicMethod intrinsic) { ! for (Map.Entry<String, List<Binding>> e : bindings.entrySet()) { ! // Match format of VMIntrinsicMethod.declaringClass ! String type = MetaUtil.internalNameToJava(e.getKey(), true, false).replace('.', '/'); ! for (Binding binding : e.getValue()) { ! if (match(type, binding, intrinsic)) { ! return binding.plugin; ! } } } return null; } ! public static ResolvedJavaMethod resolveIntrinsic(MetaAccessProvider metaAccess, VMIntrinsicMethod intrinsic) throws ClassNotFoundException { Class<?> c = Class.forName(intrinsic.declaringClass.replace('/', '.'), false, CheckGraalIntrinsics.class.getClassLoader()); for (Method javaMethod : c.getDeclaredMethods()) { if (javaMethod.getName().equals(intrinsic.name)) { ResolvedJavaMethod method = metaAccess.lookupJavaMethod(javaMethod); if (intrinsic.descriptor.equals("*")) {
*** 423,454 **** @Test @SuppressWarnings("try") public void test() throws ClassNotFoundException { HotSpotGraalRuntimeProvider rt = (HotSpotGraalRuntimeProvider) Graal.getRequiredCapability(RuntimeProvider.class); HotSpotProviders providers = rt.getHostBackend().getProviders(); - Map<ResolvedJavaMethod, Object> impl = new HashMap<>(); Plugins graphBuilderPlugins = providers.getGraphBuilderPlugins(); InvocationPlugins invocationPlugins = graphBuilderPlugins.getInvocationPlugins(); - for (ResolvedJavaMethod method : invocationPlugins.getMethods()) { - InvocationPlugin plugin = invocationPlugins.lookupInvocation(method); - assert plugin != null; - impl.put(method, plugin); - } - Set<ResolvedJavaMethod> methods = invocationPlugins.getMethods(); HotSpotVMConfigStore store = rt.getVMConfig().getStore(); List<VMIntrinsicMethod> intrinsics = store.getIntrinsics(); List<String> missing = new ArrayList<>(); for (VMIntrinsicMethod intrinsic : intrinsics) { ! ResolvedJavaMethod method = findMethod(methods, intrinsic); ! if (method == null) { ! method = resolveIntrinsic(providers.getMetaAccess(), intrinsic); ! ! IntrinsicMethod intrinsicMethod = null; if (method != null) { ! intrinsicMethod = providers.getConstantReflection().getMethodHandleAccess().lookupMethodHandleIntrinsic(method); if (intrinsicMethod != null) { continue; } } String m = String.format("%s.%s%s", intrinsic.declaringClass, intrinsic.name, intrinsic.descriptor); --- 426,449 ---- @Test @SuppressWarnings("try") public void test() throws ClassNotFoundException { HotSpotGraalRuntimeProvider rt = (HotSpotGraalRuntimeProvider) Graal.getRequiredCapability(RuntimeProvider.class); HotSpotProviders providers = rt.getHostBackend().getProviders(); Plugins graphBuilderPlugins = providers.getGraphBuilderPlugins(); InvocationPlugins invocationPlugins = graphBuilderPlugins.getInvocationPlugins(); HotSpotVMConfigStore store = rt.getVMConfig().getStore(); List<VMIntrinsicMethod> intrinsics = store.getIntrinsics(); List<String> missing = new ArrayList<>(); + Map<String, List<Binding>> bindings = invocationPlugins.getBindings(true); for (VMIntrinsicMethod intrinsic : intrinsics) { ! InvocationPlugin plugin = findPlugin(bindings, intrinsic); ! if (plugin == null) { ! ResolvedJavaMethod method = resolveIntrinsic(providers.getMetaAccess(), intrinsic); if (method != null) { ! IntrinsicMethod intrinsicMethod = providers.getConstantReflection().getMethodHandleAccess().lookupMethodHandleIntrinsic(method); if (intrinsicMethod != null) { continue; } } String m = String.format("%s.%s%s", intrinsic.declaringClass, intrinsic.name, intrinsic.descriptor);
< prev index next >