3480 assert(data->is_CounterData(), "need CounterData for calls"); |
3480 assert(data->is_CounterData(), "need CounterData for calls"); |
3481 assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); |
3481 assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); |
3482 Register mdo = op->mdo()->as_register(); |
3482 Register mdo = op->mdo()->as_register(); |
3483 __ mov_metadata(mdo, md->constant_encoding()); |
3483 __ mov_metadata(mdo, md->constant_encoding()); |
3484 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset())); |
3484 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset())); |
3485 Bytecodes::Code bc = method->java_code_at_bci(bci); |
|
3486 const bool callee_is_static = callee->is_loaded() && callee->is_static(); |
|
3487 // Perform additional virtual call profiling for invokevirtual and |
3485 // Perform additional virtual call profiling for invokevirtual and |
3488 // invokeinterface bytecodes |
3486 // invokeinterface bytecodes |
3489 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && |
3487 if (op->should_profile_receiver_type()) { |
3490 !callee_is_static && // required for optimized MH invokes |
|
3491 C1ProfileVirtualCalls) { |
|
3492 assert(op->recv()->is_single_cpu(), "recv must be allocated"); |
3488 assert(op->recv()->is_single_cpu(), "recv must be allocated"); |
3493 Register recv = op->recv()->as_register(); |
3489 Register recv = op->recv()->as_register(); |
3494 assert_different_registers(mdo, recv); |
3490 assert_different_registers(mdo, recv); |
3495 assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls"); |
3491 assert(data->is_VirtualCallData(), "need VirtualCallData for virtual calls"); |
3496 ciKlass* known_klass = op->known_holder(); |
3492 ciKlass* known_klass = op->known_holder(); |