comparison src/share/vm/graal/graalCompilerToVM.cpp @ 7089:af30115c9d0e

added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
author Doug Simon <doug.simon@oracle.com>
date Wed, 28 Nov 2012 20:39:43 +0100
parents 9ba90252ce08
children eec7173947a1
comparison
equal deleted inserted replaced
7088:97d0eae99568 7089:af30115c9d0e
733 } 733 }
734 734
735 set_int(env, config, "arrayClassElementOffset", in_bytes(ObjArrayKlass::element_klass_offset())); 735 set_int(env, config, "arrayClassElementOffset", in_bytes(ObjArrayKlass::element_klass_offset()));
736 C2V_END 736 C2V_END
737 737
738 C2V_VMENTRY(jobject, installCode, (JNIEnv *jniEnv, jobject, jobject compResult, jobject installed_code, jobject info)) 738 C2V_VMENTRY(jint, installCode0, (JNIEnv *jniEnv, jobject, jobject compResult, jobject installed_code, jobject info))
739 ResourceMark rm; 739 ResourceMark rm;
740 HandleMark hm; 740 HandleMark hm;
741 Handle compResultHandle = JNIHandles::resolve(compResult); 741 Handle compResultHandle = JNIHandles::resolve(compResult);
742 nmethod* nm = NULL; 742 nmethod* nm = NULL;
743 methodHandle method = getMethodFromHotSpotMethod(HotSpotCompilationResult::method(compResult)); 743 methodHandle method = getMethodFromHotSpotMethod(HotSpotCompilationResult::method(compResult));
744 Arena arena; 744 Arena arena;
745 ciEnv env(&arena); 745 ciEnv env(&arena);
746 Handle installed_code_handle = JNIHandles::resolve(installed_code); 746 Handle installed_code_handle = JNIHandles::resolve(installed_code);
747 CodeInstaller installer(compResultHandle, method, nm, installed_code_handle); 747 GraalEnv::CodeInstallResult result;
748 748 CodeInstaller installer(compResultHandle, method, result, nm, installed_code_handle);
749 if (nm == NULL) { 749
750 // dependency (re)checking failed 750 if (result != GraalEnv::ok) {
751 return NULL; 751 assert(nm == NULL, "should be");
752 }
753
754 if (info != NULL) {
755 arrayOop codeCopy = oopFactory::new_byteArray(nm->code_size(), CHECK_0);
756 memcpy(codeCopy->base(T_BYTE), nm->code_begin(), nm->code_size());
757 HotSpotCodeInfo::set_code(info, codeCopy);
758 HotSpotCodeInfo::set_start(info, (jlong) nm->code_begin());
759 }
760
761 if (!installed_code_handle.is_null()) {
762 assert(installed_code_handle->is_a(HotSpotInstalledCode::klass()), "wrong type");
763 HotSpotInstalledCode::set_nmethod(installed_code_handle, (jlong) nm);
764 HotSpotInstalledCode::set_method(installed_code_handle, HotSpotCompilationResult::method(compResult));
765 assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable");
766 return installed_code;
767 } else { 752 } else {
768 return NULL; 753 if (info != NULL) {
769 } 754 arrayOop codeCopy = oopFactory::new_byteArray(nm->code_size(), CHECK_0);
755 memcpy(codeCopy->base(T_BYTE), nm->code_begin(), nm->code_size());
756 HotSpotCodeInfo::set_code(info, codeCopy);
757 HotSpotCodeInfo::set_start(info, (jlong) nm->code_begin());
758 }
759
760 if (!installed_code_handle.is_null()) {
761 assert(installed_code_handle->is_a(HotSpotInstalledCode::klass()), "wrong type");
762 HotSpotInstalledCode::set_nmethod(installed_code_handle, (jlong) nm);
763 HotSpotInstalledCode::set_method(installed_code_handle, HotSpotCompilationResult::method(compResult));
764 assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable");
765 }
766 }
767 return result;
770 C2V_END 768 C2V_END
771 769
772 C2V_VMENTRY(jobject, disassembleNative, (JNIEnv *jniEnv, jobject, jbyteArray code, jlong start_address)) 770 C2V_VMENTRY(jobject, disassembleNative, (JNIEnv *jniEnv, jobject, jbyteArray code, jlong start_address))
773 ResourceMark rm; 771 ResourceMark rm;
774 HandleMark hm; 772 HandleMark hm;
950 {CC"getResolvedType", CC"("CLASS")"RESOLVED_TYPE, FN_PTR(getResolvedType)}, 948 {CC"getResolvedType", CC"("CLASS")"RESOLVED_TYPE, FN_PTR(getResolvedType)},
951 {CC"getMetaspaceMethod", CC"("REFLECT_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, 949 {CC"getMetaspaceMethod", CC"("REFLECT_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)},
952 {CC"getMetaspaceConstructor", CC"("REFLECT_CONSTRUCTOR"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceConstructor)}, 950 {CC"getMetaspaceConstructor", CC"("REFLECT_CONSTRUCTOR"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceConstructor)},
953 {CC"getJavaField", CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD, FN_PTR(getJavaField)}, 951 {CC"getJavaField", CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD, FN_PTR(getJavaField)},
954 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, 952 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)},
955 {CC"installCode", CC"("HS_COMP_RESULT HS_INSTALLED_CODE HS_CODE_INFO")"HS_INSTALLED_CODE, FN_PTR(installCode)}, 953 {CC"installCode0", CC"("HS_COMP_RESULT HS_INSTALLED_CODE HS_CODE_INFO")I", FN_PTR(installCode0)},
956 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)}, 954 {CC"disassembleNative", CC"([BJ)"STRING, FN_PTR(disassembleNative)},
957 {CC"executeCompiledMethod", CC"("METASPACE_METHOD NMETHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)}, 955 {CC"executeCompiledMethod", CC"("METASPACE_METHOD NMETHOD OBJECT OBJECT OBJECT")"OBJECT, FN_PTR(executeCompiledMethod)},
958 {CC"executeCompiledMethodVarargs", CC"("METASPACE_METHOD NMETHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, 956 {CC"executeCompiledMethodVarargs", CC"("METASPACE_METHOD NMETHOD "["OBJECT")"OBJECT, FN_PTR(executeCompiledMethodVarargs)},
959 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)}, 957 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)},
960 {CC"decodePC", CC"(J)"STRING, FN_PTR(decodePC)}, 958 {CC"decodePC", CC"(J)"STRING, FN_PTR(decodePC)},