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)},