src/share/vm/c1/c1_LIRGenerator.cpp

Print this page
rev 2893 : 7121756: Improve C1 inlining policy by using profiling at call sites
Summary: profile based recompilation of methods with C1 with more inlining.
Reviewed-by:


2726 
2727   invoke_load_arguments(x, args, arg_list);
2728 
2729   if (x->has_receiver()) {
2730     args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
2731     receiver = args->at(0)->result();
2732   }
2733 
2734   // emit invoke code
2735   bool optimized = x->target_is_loaded() && x->target_is_final();
2736   assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
2737 
2738   // JSR 292
2739   // Preserve the SP over MethodHandle call sites.
2740   ciMethod* target = x->target();
2741   if (target->is_method_handle_invoke()) {
2742     info->set_is_method_handle_invoke(true);
2743     __ move(FrameMap::stack_pointer(), FrameMap::method_handle_invoke_SP_save_opr());
2744   }
2745 


2746   switch (x->code()) {
2747     case Bytecodes::_invokestatic:
2748       __ call_static(target, result_register,
2749                      SharedRuntime::get_resolve_static_call_stub(),
2750                      arg_list, info);
2751       break;
2752     case Bytecodes::_invokespecial:
2753     case Bytecodes::_invokevirtual:
2754     case Bytecodes::_invokeinterface:
2755       // for final target we still produce an inline cache, in order
2756       // to be able to call mixed mode
2757       if (x->code() == Bytecodes::_invokespecial || optimized) {
2758         __ call_opt_virtual(target, receiver, result_register,
2759                             SharedRuntime::get_resolve_opt_virtual_call_stub(),
2760                             arg_list, info);
2761       } else if (x->vtable_index() < 0) {
2762         __ call_icvirtual(target, receiver, result_register,
2763                           SharedRuntime::get_resolve_virtual_call_stub(),
2764                           arg_list, info);
2765       } else {




2726 
2727   invoke_load_arguments(x, args, arg_list);
2728 
2729   if (x->has_receiver()) {
2730     args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
2731     receiver = args->at(0)->result();
2732   }
2733 
2734   // emit invoke code
2735   bool optimized = x->target_is_loaded() && x->target_is_final();
2736   assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
2737 
2738   // JSR 292
2739   // Preserve the SP over MethodHandle call sites.
2740   ciMethod* target = x->target();
2741   if (target->is_method_handle_invoke()) {
2742     info->set_is_method_handle_invoke(true);
2743     __ move(FrameMap::stack_pointer(), FrameMap::method_handle_invoke_SP_save_opr());
2744   }
2745 
2746   info->set_profiled_call(x->is_profiled());
2747 
2748   switch (x->code()) {
2749     case Bytecodes::_invokestatic:
2750       __ call_static(target, result_register,
2751                      SharedRuntime::get_resolve_static_call_stub(),
2752                      arg_list, info);
2753       break;
2754     case Bytecodes::_invokespecial:
2755     case Bytecodes::_invokevirtual:
2756     case Bytecodes::_invokeinterface:
2757       // for final target we still produce an inline cache, in order
2758       // to be able to call mixed mode
2759       if (x->code() == Bytecodes::_invokespecial || optimized) {
2760         __ call_opt_virtual(target, receiver, result_register,
2761                             SharedRuntime::get_resolve_opt_virtual_call_stub(),
2762                             arg_list, info);
2763       } else if (x->vtable_index() < 0) {
2764         __ call_icvirtual(target, receiver, result_register,
2765                           SharedRuntime::get_resolve_virtual_call_stub(),
2766                           arg_list, info);
2767       } else {