comparison src/share/vm/graal/graalCompilerToVM.cpp @ 7225:31c4d9f9e922

adder better CHA support added more test cases for inlining and intrinsification
author Christian Haeubl <haeubl@ssw.jku.at>
date Fri, 14 Dec 2012 12:05:35 +0100
parents 720925633b3a
children 8a3efb8c831d
comparison
equal deleted inserted replaced
7224:fb16d8681ddc 7225:31c4d9f9e922
222 } 222 }
223 223
224 C2V_VMENTRY(jlong, getUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_method, jobject resultHolder)) 224 C2V_VMENTRY(jlong, getUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_method, jobject resultHolder))
225 methodHandle method = asMethod(metaspace_method); 225 methodHandle method = asMethod(metaspace_method);
226 KlassHandle holder = method->method_holder(); 226 KlassHandle holder = method->method_holder();
227 if (holder->is_interface()) { 227 // TODO (chaeubl): check if the following is necessary
228 // Cannot trust interfaces. Because of: 228 //if (holder->is_interface()) {
229 // interface I { void foo(); } 229 // // Cannot trust interfaces. Because of:
230 // class A { public void foo() {} } 230 // // interface I { void foo(); }
231 // class B extends A implements I { } 231 // // class A { public void foo() {} }
232 // class C extends B { public void foo() { } } 232 // // class B extends A implements I { }
233 // class D extends B { } 233 // // class C extends B { public void foo() { } }
234 // Would lead to identify C.foo() as the unique concrete method for I.foo() without seeing A.foo(). 234 // // class D extends B { }
235 return 0L; 235 // // Would lead to identify C.foo() as the unique concrete method for I.foo() without seeing A.foo().
236 } 236 // return 0L;
237 //}
237 methodHandle ucm; 238 methodHandle ucm;
238 { 239 {
239 ResourceMark rm; 240 ResourceMark rm;
240 MutexLocker locker(Compile_lock); 241 MutexLocker locker(Compile_lock);
241 ucm = Dependencies::find_unique_concrete_method(holder(), method()); 242 ucm = Dependencies::find_unique_concrete_method(holder(), method());
246 } 247 }
247 248
248 Handle type = GraalCompiler::createHotSpotResolvedObjectType(ucm(), CHECK_0); 249 Handle type = GraalCompiler::createHotSpotResolvedObjectType(ucm(), CHECK_0);
249 objArrayOop(JNIHandles::resolve(resultHolder))->obj_at_put(0, type()); 250 objArrayOop(JNIHandles::resolve(resultHolder))->obj_at_put(0, type());
250 return (jlong) (address) ucm(); 251 return (jlong) (address) ucm();
252 C2V_END
253
254 C2V_VMENTRY(jobject, getUniqueImplementor, (JNIEnv *, jobject, jobject interface_type))
255 InstanceKlass* klass = (InstanceKlass*) asKlass(HotSpotResolvedObjectType::metaspaceKlass(interface_type));
256 assert(klass->is_interface(), "must be");
257 if (klass->nof_implementors() == 1) {
258 InstanceKlass* implementor = (InstanceKlass*) klass->implementor();
259 if (!implementor->is_abstract() && !implementor->is_interface() && implementor->is_leaf_class()) {
260 Handle type = GraalCompiler::get_JavaType(implementor, CHECK_NULL);
261 return JNIHandles::make_local(THREAD, type());
262 }
263 }
264 return NULL;
251 C2V_END 265 C2V_END
252 266
253 C2V_ENTRY(jint, getInvocationCount, (JNIEnv *, jobject, jlong metaspace_method)) 267 C2V_ENTRY(jint, getInvocationCount, (JNIEnv *, jobject, jlong metaspace_method))
254 Method* method = asMethod(metaspace_method); 268 Method* method = asMethod(metaspace_method);
255 return method->invocation_count(); 269 return method->invocation_count();
945 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, 959 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)},
946 {CC"getSignature", CC"("METASPACE_METHOD")"STRING, FN_PTR(getSignature)}, 960 {CC"getSignature", CC"("METASPACE_METHOD")"STRING, FN_PTR(getSignature)},
947 {CC"initializeExceptionHandlers", CC"("METASPACE_METHOD EXCEPTION_HANDLERS")"EXCEPTION_HANDLERS, FN_PTR(initializeExceptionHandlers)}, 961 {CC"initializeExceptionHandlers", CC"("METASPACE_METHOD EXCEPTION_HANDLERS")"EXCEPTION_HANDLERS, FN_PTR(initializeExceptionHandlers)},
948 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, 962 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)},
949 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)}, 963 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)},
964 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)},
950 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, 965 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)},
951 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)}, 966 {CC"initializeMethod", CC"("METASPACE_METHOD HS_RESOLVED_METHOD")V", FN_PTR(initializeMethod)},
952 {CC"initializeMethodData", CC"("METASPACE_METHOD_DATA METHOD_DATA")V", FN_PTR(initializeMethodData)}, 967 {CC"initializeMethodData", CC"("METASPACE_METHOD_DATA METHOD_DATA")V", FN_PTR(initializeMethodData)},
953 {CC"isMethodCompilable", CC"("METASPACE_METHOD")Z", FN_PTR(isMethodCompilable)}, 968 {CC"isMethodCompilable", CC"("METASPACE_METHOD")Z", FN_PTR(isMethodCompilable)},
954 {CC"getInvocationCount", CC"("METASPACE_METHOD")I", FN_PTR(getInvocationCount)}, 969 {CC"getInvocationCount", CC"("METASPACE_METHOD")I", FN_PTR(getInvocationCount)},