Mercurial > hg > truffle
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)}, |