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);