hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
changeset 42544 58de8aaf9365
parent 42063 dca9294d9f59
child 43676 c6eed495a42b
equal deleted inserted replaced
42543:9e7ac7aff2d1 42544:58de8aaf9365
  2974     args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
  2974     args->at(0)->load_item_force(LIR_Assembler::receiverOpr());
  2975     receiver = args->at(0)->result();
  2975     receiver = args->at(0)->result();
  2976   }
  2976   }
  2977 
  2977 
  2978   // emit invoke code
  2978   // emit invoke code
  2979   bool optimized = x->target_is_loaded() && x->target_is_final();
       
  2980   assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
  2979   assert(receiver->is_illegal() || receiver->is_equal(LIR_Assembler::receiverOpr()), "must match");
  2981 
  2980 
  2982   // JSR 292
  2981   // JSR 292
  2983   // Preserve the SP over MethodHandle call sites, if needed.
  2982   // Preserve the SP over MethodHandle call sites, if needed.
  2984   ciMethod* target = x->target();
  2983   ciMethod* target = x->target();
  2999                      arg_list, info);
  2998                      arg_list, info);
  3000       break;
  2999       break;
  3001     case Bytecodes::_invokespecial:
  3000     case Bytecodes::_invokespecial:
  3002     case Bytecodes::_invokevirtual:
  3001     case Bytecodes::_invokevirtual:
  3003     case Bytecodes::_invokeinterface:
  3002     case Bytecodes::_invokeinterface:
  3004       // for final target we still produce an inline cache, in order
  3003       // for loaded and final (method or class) target we still produce an inline cache,
  3005       // to be able to call mixed mode
  3004       // in order to be able to call mixed mode
  3006       if (x->code() == Bytecodes::_invokespecial || optimized) {
  3005       if (x->code() == Bytecodes::_invokespecial || x->target_is_final()) {
  3007         __ call_opt_virtual(target, receiver, result_register,
  3006         __ call_opt_virtual(target, receiver, result_register,
  3008                             SharedRuntime::get_resolve_opt_virtual_call_stub(),
  3007                             SharedRuntime::get_resolve_opt_virtual_call_stub(),
  3009                             arg_list, info);
  3008                             arg_list, info);
  3010       } else if (x->vtable_index() < 0) {
  3009       } else if (x->vtable_index() < 0) {
  3011         __ call_icvirtual(target, receiver, result_register,
  3010         __ call_icvirtual(target, receiver, result_register,