53 // Lazy fields, filled in on demand. Require allocation. |
53 // Lazy fields, filled in on demand. Require allocation. |
54 _code = NULL; |
54 _code = NULL; |
55 _exception_handlers = NULL; |
55 _exception_handlers = NULL; |
56 _liveness = NULL; |
56 _liveness = NULL; |
57 _method_blocks = NULL; |
57 _method_blocks = NULL; |
58 #ifdef COMPILER2 |
58 #if defined(COMPILER2) || defined(SHARK) |
59 _flow = NULL; |
59 _flow = NULL; |
60 _bcea = NULL; |
60 _bcea = NULL; |
61 #endif // COMPILER2 |
61 #endif // COMPILER2 || SHARK |
62 |
62 |
63 ciEnv *env = CURRENT_ENV; |
63 ciEnv *env = CURRENT_ENV; |
64 if (env->jvmti_can_hotswap_or_post_breakpoint() && _is_compilable) { |
64 if (env->jvmti_can_hotswap_or_post_breakpoint() && _is_compilable) { |
65 // 6328518 check hotswap conditions under the right lock. |
65 // 6328518 check hotswap conditions under the right lock. |
66 MutexLocker locker(Compile_lock); |
66 MutexLocker locker(Compile_lock); |
121 _intrinsic_id = vmIntrinsics::_none; |
121 _intrinsic_id = vmIntrinsics::_none; |
122 _liveness = NULL; |
122 _liveness = NULL; |
123 _can_be_statically_bound = false; |
123 _can_be_statically_bound = false; |
124 _method_blocks = NULL; |
124 _method_blocks = NULL; |
125 _method_data = NULL; |
125 _method_data = NULL; |
126 #ifdef COMPILER2 |
126 #if defined(COMPILER2) || defined(SHARK) |
127 _flow = NULL; |
127 _flow = NULL; |
128 _bcea = NULL; |
128 _bcea = NULL; |
129 #endif // COMPILER2 |
129 #endif // COMPILER2 || SHARK |
130 } |
130 } |
131 |
131 |
132 |
132 |
133 // ------------------------------------------------------------------ |
133 // ------------------------------------------------------------------ |
134 // ciMethod::load_code |
134 // ciMethod::load_code |
227 VM_ENTRY_MARK; |
227 VM_ENTRY_MARK; |
228 return get_methodOop()->vtable_index(); |
228 return get_methodOop()->vtable_index(); |
229 } |
229 } |
230 |
230 |
231 |
231 |
|
232 #ifdef SHARK |
|
233 // ------------------------------------------------------------------ |
|
234 // ciMethod::itable_index |
|
235 // |
|
236 // Get the position of this method's entry in the itable, if any. |
|
237 int ciMethod::itable_index() { |
|
238 check_is_loaded(); |
|
239 assert(holder()->is_linked(), "must be linked"); |
|
240 VM_ENTRY_MARK; |
|
241 return klassItable::compute_itable_index(get_methodOop()); |
|
242 } |
|
243 #endif // SHARK |
|
244 |
|
245 |
232 // ------------------------------------------------------------------ |
246 // ------------------------------------------------------------------ |
233 // ciMethod::native_entry |
247 // ciMethod::native_entry |
234 // |
248 // |
235 // Get the address of this method's native code, if any. |
249 // Get the address of this method's native code, if any. |
236 address ciMethod::native_entry() { |
250 address ciMethod::native_entry() { |
292 |
306 |
293 |
307 |
294 // ------------------------------------------------------------------ |
308 // ------------------------------------------------------------------ |
295 // ciMethod::get_flow_analysis |
309 // ciMethod::get_flow_analysis |
296 ciTypeFlow* ciMethod::get_flow_analysis() { |
310 ciTypeFlow* ciMethod::get_flow_analysis() { |
297 #ifdef COMPILER2 |
311 #if defined(COMPILER2) || defined(SHARK) |
298 if (_flow == NULL) { |
312 if (_flow == NULL) { |
299 ciEnv* env = CURRENT_ENV; |
313 ciEnv* env = CURRENT_ENV; |
300 _flow = new (env->arena()) ciTypeFlow(env, this); |
314 _flow = new (env->arena()) ciTypeFlow(env, this); |
301 _flow->do_flow(); |
315 _flow->do_flow(); |
302 } |
316 } |
303 return _flow; |
317 return _flow; |
304 #else // COMPILER2 |
318 #else // COMPILER2 || SHARK |
305 ShouldNotReachHere(); |
319 ShouldNotReachHere(); |
306 return NULL; |
320 return NULL; |
307 #endif // COMPILER2 |
321 #endif // COMPILER2 || SHARK |
308 } |
322 } |
309 |
323 |
310 |
324 |
311 // ------------------------------------------------------------------ |
325 // ------------------------------------------------------------------ |
312 // ciMethod::get_osr_flow_analysis |
326 // ciMethod::get_osr_flow_analysis |
313 ciTypeFlow* ciMethod::get_osr_flow_analysis(int osr_bci) { |
327 ciTypeFlow* ciMethod::get_osr_flow_analysis(int osr_bci) { |
314 #ifdef COMPILER2 |
328 #if defined(COMPILER2) || defined(SHARK) |
315 // OSR entry points are always place after a call bytecode of some sort |
329 // OSR entry points are always place after a call bytecode of some sort |
316 assert(osr_bci >= 0, "must supply valid OSR entry point"); |
330 assert(osr_bci >= 0, "must supply valid OSR entry point"); |
317 ciEnv* env = CURRENT_ENV; |
331 ciEnv* env = CURRENT_ENV; |
318 ciTypeFlow* flow = new (env->arena()) ciTypeFlow(env, this, osr_bci); |
332 ciTypeFlow* flow = new (env->arena()) ciTypeFlow(env, this, osr_bci); |
319 flow->do_flow(); |
333 flow->do_flow(); |
320 return flow; |
334 return flow; |
321 #else // COMPILER2 |
335 #else // COMPILER2 || SHARK |
322 ShouldNotReachHere(); |
336 ShouldNotReachHere(); |
323 return NULL; |
337 return NULL; |
324 #endif // COMPILER2 |
338 #endif // COMPILER2 || SHARK |
325 } |
339 } |
326 |
340 |
327 // ------------------------------------------------------------------ |
341 // ------------------------------------------------------------------ |
328 // ciMethod::raw_liveness_at_bci |
342 // ciMethod::raw_liveness_at_bci |
329 // |
343 // |