< 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,32 +27,32 @@
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.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,32 +61,35 @@
* {@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)) {
+ 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;
}
- private static ResolvedJavaMethod findMethod(Set<ResolvedJavaMethod> methods, VMIntrinsicMethod intrinsic) {
- for (ResolvedJavaMethod method : methods) {
- if (match(method, intrinsic)) {
- return method;
+ 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;
}
- private static ResolvedJavaMethod resolveIntrinsic(MetaAccessProvider metaAccess, VMIntrinsicMethod intrinsic) throws ClassNotFoundException {
+ 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,32 +426,24 @@
@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<>();
+ Map<String, List<Binding>> bindings = invocationPlugins.getBindings(true);
for (VMIntrinsicMethod intrinsic : intrinsics) {
- ResolvedJavaMethod method = findMethod(methods, intrinsic);
- if (method == null) {
- method = resolveIntrinsic(providers.getMetaAccess(), intrinsic);
-
- IntrinsicMethod intrinsicMethod = null;
+ InvocationPlugin plugin = findPlugin(bindings, intrinsic);
+ if (plugin == null) {
+ ResolvedJavaMethod method = resolveIntrinsic(providers.getMetaAccess(), intrinsic);
if (method != null) {
- intrinsicMethod = providers.getConstantReflection().getMethodHandleAccess().lookupMethodHandleIntrinsic(method);
+ 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 >