Mercurial > hg > truffle
comparison src/share/vm/c1/c1_GraphBuilder.hpp @ 6266:1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
6984705: JSR 292 method handle creation should not go through JNI
Summary: remove assembly code for JDK 7 chained method handles
Reviewed-by: jrose, twisti, kvn, mhaupt
Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author | twisti |
---|---|
date | Tue, 24 Jul 2012 10:51:00 -0700 |
parents | f067b4e0e04b |
children | 7f813940ac35 |
comparison
equal
deleted
inserted
replaced
6241:aba91a731143 | 6266:1d7922586cf6 |
---|---|
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(); } |