Mercurial > hg > truffle
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 13373:430c9f08728d
moved most CompilerToVM.getUniqueConcreteMethod logic up to Java and replace getUniqueConcreteMethod with findUniqueConcreteMethod
author | twisti |
---|---|
date | Tue, 17 Dec 2013 19:09:29 -0800 |
parents | 5a4293f24642 |
children | ad187607b784 |
comparison
equal
deleted
inserted
replaced
13372:af10ee69a8ac | 13373:430c9f08728d |
---|---|
169 Klass* holder = java_lang_Class::as_Klass(java_class); | 169 Klass* holder = java_lang_Class::as_Klass(java_class); |
170 methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot); | 170 methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot); |
171 return (jlong) (address) method(); | 171 return (jlong) (address) method(); |
172 } | 172 } |
173 | 173 |
174 C2V_VMENTRY(jlong, getUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_method, jobject resultHolder)) | 174 C2V_VMENTRY(jlong, findUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_method)) |
175 methodHandle method = asMethod(metaspace_method); | 175 methodHandle method = asMethod(metaspace_method); |
176 KlassHandle holder = method->method_holder(); | 176 KlassHandle holder = method->method_holder(); |
177 if (holder->is_interface()) { | 177 assert(!holder->is_interface(), "should be handled in Java code"); |
178 // Cannot trust interfaces. Because of: | 178 ResourceMark rm; |
179 // interface I { void foo(); } | 179 MutexLocker locker(Compile_lock); |
180 // class A { public void foo() {} } | 180 Method* ucm = Dependencies::find_unique_concrete_method(holder(), method()); |
181 // class B extends A implements I { } | 181 return (jlong) (address) ucm; |
182 // class C extends B { public void foo() { } } | |
183 // class D extends B { } | |
184 // Would lead to identify C.foo() as the unique concrete method for I.foo() without seeing A.foo(). | |
185 return 0L; | |
186 } | |
187 methodHandle ucm; | |
188 { | |
189 ResourceMark rm; | |
190 MutexLocker locker(Compile_lock); | |
191 ucm = Dependencies::find_unique_concrete_method(holder(), method()); | |
192 } | |
193 | |
194 if (ucm.is_null()) { | |
195 return 0L; | |
196 } | |
197 | |
198 Handle type = GraalCompiler::createHotSpotResolvedObjectType(ucm(), CHECK_0); | |
199 objArrayOop(JNIHandles::resolve(resultHolder))->obj_at_put(0, type()); | |
200 return (jlong) (address) ucm(); | |
201 C2V_END | 182 C2V_END |
202 | 183 |
203 C2V_VMENTRY(jobject, getUniqueImplementor, (JNIEnv *, jobject, jobject interface_type)) | 184 C2V_VMENTRY(jobject, getUniqueImplementor, (JNIEnv *, jobject, jobject interface_type)) |
204 InstanceKlass* klass = (InstanceKlass*) java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(interface_type)); | 185 InstanceKlass* klass = (InstanceKlass*) java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(interface_type)); |
205 assert(klass->is_interface(), "must be"); | 186 assert(klass->is_interface(), "must be"); |
887 | 868 |
888 JNINativeMethod CompilerToVM_methods[] = { | 869 JNINativeMethod CompilerToVM_methods[] = { |
889 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, | 870 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, |
890 {CC"exceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(exceptionTableStart)}, | 871 {CC"exceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(exceptionTableStart)}, |
891 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, | 872 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, |
892 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)}, | 873 {CC"findUniqueConcreteMethod", CC"("METASPACE_METHOD")"METASPACE_METHOD, FN_PTR(findUniqueConcreteMethod)}, |
893 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)}, | 874 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)}, |
894 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, | 875 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, |
895 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)}, | 876 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)}, |
896 {CC"doNotInlineOrCompile", CC"("METASPACE_METHOD")V", FN_PTR(doNotInlineOrCompile)}, | 877 {CC"doNotInlineOrCompile", CC"("METASPACE_METHOD")V", FN_PTR(doNotInlineOrCompile)}, |
897 {CC"isMethodCompilable", CC"("METASPACE_METHOD")Z", FN_PTR(isMethodCompilable)}, | 878 {CC"isMethodCompilable", CC"("METASPACE_METHOD")Z", FN_PTR(isMethodCompilable)}, |