223 |
223 |
224 // instruction helpers |
224 // instruction helpers |
225 void load_constant(); |
225 void load_constant(); |
226 void load_local(ValueType* type, int index); |
226 void load_local(ValueType* type, int index); |
227 void store_local(ValueType* type, int index); |
227 void store_local(ValueType* type, int index); |
228 void store_local(ValueStack* state, Value value, ValueType* type, int index); |
228 void store_local(ValueStack* state, Value value, int index); |
229 void load_indexed (BasicType type); |
229 void load_indexed (BasicType type); |
230 void store_indexed(BasicType type); |
230 void store_indexed(BasicType type); |
231 void stack_op(Bytecodes::Code code); |
231 void stack_op(Bytecodes::Code code); |
232 void arithmetic_op(ValueType* type, Bytecodes::Code code, ValueStack* state_before = NULL); |
232 void arithmetic_op(ValueType* type, Bytecodes::Code code, ValueStack* state_before = NULL); |
233 void negate_op(ValueType* type); |
233 void negate_op(ValueType* type); |
335 // inlining of synchronized methods |
335 // inlining of synchronized methods |
336 void inline_sync_entry(Value lock, BlockBegin* sync_handler); |
336 void inline_sync_entry(Value lock, BlockBegin* sync_handler); |
337 void fill_sync_handler(Value lock, BlockBegin* sync_handler, bool default_handler = false); |
337 void fill_sync_handler(Value lock, BlockBegin* sync_handler, bool default_handler = false); |
338 |
338 |
339 // inliners |
339 // inliners |
340 bool try_inline( ciMethod* callee, bool holder_known, Value receiver = NULL); |
340 bool try_inline( ciMethod* callee, bool holder_known, Bytecodes::Code bc = Bytecodes::_illegal, Value receiver = NULL); |
341 bool try_inline_intrinsics(ciMethod* callee); |
341 bool try_inline_intrinsics(ciMethod* callee); |
342 bool try_inline_full( ciMethod* callee, bool holder_known, BlockBegin* cont_block, Value receiver); |
342 bool try_inline_full( ciMethod* callee, bool holder_known, Bytecodes::Code bc = Bytecodes::_illegal, Value receiver = NULL); |
343 bool try_inline_jsr(int jsr_dest_bci); |
343 bool try_inline_jsr(int jsr_dest_bci); |
|
344 |
|
345 const char* check_can_parse(ciMethod* callee) const; |
|
346 const char* should_not_inline(ciMethod* callee) const; |
344 |
347 |
345 // JSR 292 support |
348 // JSR 292 support |
346 bool for_method_handle_inline(ciMethod* callee); |
349 bool for_method_handle_inline(ciMethod* callee); |
347 bool for_invokedynamic_inline(ciMethod* callee); |
|
348 |
350 |
349 // helpers |
351 // helpers |
350 void inline_bailout(const char* msg); |
352 void inline_bailout(const char* msg); |
351 BlockBegin* header_block(BlockBegin* entry, BlockBegin::Flag f, ValueStack* state); |
353 BlockBegin* header_block(BlockBegin* entry, BlockBegin::Flag f, ValueStack* state); |
352 BlockBegin* setup_start_block(int osr_bci, BlockBegin* std_entry, BlockBegin* osr_entry, ValueStack* init_state); |
354 BlockBegin* setup_start_block(int osr_bci, BlockBegin* std_entry, BlockBegin* osr_entry, ValueStack* init_state); |
364 bool append_unsafe_get_raw(ciMethod* callee, BasicType t); |
366 bool append_unsafe_get_raw(ciMethod* callee, BasicType t); |
365 bool append_unsafe_put_raw(ciMethod* callee, BasicType t); |
367 bool append_unsafe_put_raw(ciMethod* callee, BasicType t); |
366 bool append_unsafe_prefetch(ciMethod* callee, bool is_store, bool is_static); |
368 bool append_unsafe_prefetch(ciMethod* callee, bool is_store, bool is_static); |
367 void append_unsafe_CAS(ciMethod* callee); |
369 void append_unsafe_CAS(ciMethod* callee); |
368 |
370 |
369 NOT_PRODUCT(void print_inline_result(ciMethod* callee, bool res);) |
371 void print_inlining(ciMethod* callee, const char* msg, bool success = true); |
370 |
372 |
371 void profile_call(Value recv, ciKlass* predicted_holder); |
373 void profile_call(ciMethod* callee, Value recv, ciKlass* predicted_holder); |
372 void profile_invocation(ciMethod* inlinee, ValueStack* state); |
374 void profile_invocation(ciMethod* inlinee, ValueStack* state); |
373 |
375 |
374 // Shortcuts to profiling control. |
376 // Shortcuts to profiling control. |
375 bool is_profiling() { return _compilation->is_profiling(); } |
377 bool is_profiling() { return _compilation->is_profiling(); } |
376 bool count_invocations() { return _compilation->count_invocations(); } |
378 bool count_invocations() { return _compilation->count_invocations(); } |