Mercurial > hg > graal-jvmci-8
comparison src/share/vm/compiler/compileBroker.cpp @ 4855:bf5da1648543
Merge
author | kamg |
---|---|
date | Fri, 27 Jan 2012 10:42:36 -0500 |
parents | de268c8a8075 20334ed5ed3c |
children | 379b22e03c32 |
comparison
equal
deleted
inserted
replaced
4854:de268c8a8075 | 4855:bf5da1648543 |
---|---|
960 int osr_bci, | 960 int osr_bci, |
961 int comp_level, | 961 int comp_level, |
962 methodHandle hot_method, | 962 methodHandle hot_method, |
963 int hot_count, | 963 int hot_count, |
964 const char* comment, | 964 const char* comment, |
965 TRAPS) { | 965 Thread* thread) { |
966 // do nothing if compiler thread(s) is not available | 966 // do nothing if compiler thread(s) is not available |
967 if (!_initialized ) { | 967 if (!_initialized ) { |
968 return; | 968 return; |
969 } | 969 } |
970 | 970 |
1036 bool blocking = false; | 1036 bool blocking = false; |
1037 CompileQueue* queue = compile_queue(comp_level); | 1037 CompileQueue* queue = compile_queue(comp_level); |
1038 | 1038 |
1039 // Acquire our lock. | 1039 // Acquire our lock. |
1040 { | 1040 { |
1041 MutexLocker locker(queue->lock(), THREAD); | 1041 MutexLocker locker(queue->lock(), thread); |
1042 | 1042 |
1043 // Make sure the method has not slipped into the queues since | 1043 // Make sure the method has not slipped into the queues since |
1044 // last we checked; note that those checks were "fast bail-outs". | 1044 // last we checked; note that those checks were "fast bail-outs". |
1045 // Here we need to be more careful, see 14012000 below. | 1045 // Here we need to be more careful, see 14012000 below. |
1046 if (compilation_is_in_queue(method, osr_bci)) { | 1046 if (compilation_is_in_queue(method, osr_bci)) { |
1118 | 1118 |
1119 | 1119 |
1120 nmethod* CompileBroker::compile_method(methodHandle method, int osr_bci, | 1120 nmethod* CompileBroker::compile_method(methodHandle method, int osr_bci, |
1121 int comp_level, | 1121 int comp_level, |
1122 methodHandle hot_method, int hot_count, | 1122 methodHandle hot_method, int hot_count, |
1123 const char* comment, TRAPS) { | 1123 const char* comment, Thread* THREAD) { |
1124 // make sure arguments make sense | 1124 // make sure arguments make sense |
1125 assert(method->method_holder()->klass_part()->oop_is_instance(), "not an instance method"); | 1125 assert(method->method_holder()->klass_part()->oop_is_instance(), "not an instance method"); |
1126 assert(osr_bci == InvocationEntryBci || (0 <= osr_bci && osr_bci < method->code_size()), "bci out of range"); | 1126 assert(osr_bci == InvocationEntryBci || (0 <= osr_bci && osr_bci < method->code_size()), "bci out of range"); |
1127 assert(!method->is_abstract() && (osr_bci == InvocationEntryBci || !method->is_native()), "cannot compile abstract/native methods"); | 1127 assert(!method->is_abstract() && (osr_bci == InvocationEntryBci || !method->is_native()), "cannot compile abstract/native methods"); |
1128 assert(!instanceKlass::cast(method->method_holder())->is_not_initialized(), "method holder must be initialized"); | 1128 assert(!instanceKlass::cast(method->method_holder())->is_not_initialized(), "method holder must be initialized"); |
1172 } | 1172 } |
1173 | 1173 |
1174 assert(!HAS_PENDING_EXCEPTION, "No exception should be present"); | 1174 assert(!HAS_PENDING_EXCEPTION, "No exception should be present"); |
1175 // some prerequisites that are compiler specific | 1175 // some prerequisites that are compiler specific |
1176 if (compiler(comp_level)->is_c2() || compiler(comp_level)->is_shark()) { | 1176 if (compiler(comp_level)->is_c2() || compiler(comp_level)->is_shark()) { |
1177 method->constants()->resolve_string_constants(CHECK_0); | 1177 method->constants()->resolve_string_constants(CHECK_AND_CLEAR_NULL); |
1178 // Resolve all classes seen in the signature of the method | 1178 // Resolve all classes seen in the signature of the method |
1179 // we are compiling. | 1179 // we are compiling. |
1180 methodOopDesc::load_signature_classes(method, CHECK_0); | 1180 methodOopDesc::load_signature_classes(method, CHECK_AND_CLEAR_NULL); |
1181 } | 1181 } |
1182 | 1182 |
1183 // If the method is native, do the lookup in the thread requesting | 1183 // If the method is native, do the lookup in the thread requesting |
1184 // the compilation. Native lookups can load code, which is not | 1184 // the compilation. Native lookups can load code, which is not |
1185 // permitted during compilation. | 1185 // permitted during compilation. |
1229 (void) AdapterHandlerLibrary::create_native_wrapper(method, compile_id); | 1229 (void) AdapterHandlerLibrary::create_native_wrapper(method, compile_id); |
1230 } else { | 1230 } else { |
1231 return NULL; | 1231 return NULL; |
1232 } | 1232 } |
1233 } else { | 1233 } else { |
1234 compile_method_base(method, osr_bci, comp_level, hot_method, hot_count, comment, CHECK_0); | 1234 compile_method_base(method, osr_bci, comp_level, hot_method, hot_count, comment, THREAD); |
1235 } | 1235 } |
1236 | 1236 |
1237 // return requested nmethod | 1237 // return requested nmethod |
1238 // We accept a higher level osr method | 1238 // We accept a higher level osr method |
1239 return osr_bci == InvocationEntryBci ? method->code() : method->lookup_osr_nmethod_for(osr_bci, comp_level, false); | 1239 return osr_bci == InvocationEntryBci ? method->code() : method->lookup_osr_nmethod_for(osr_bci, comp_level, false); |