< prev index next >

src/share/vm/ci/ciMethod.cpp

Print this page




 559 // ------------------------------------------------------------------
 560 // Add new receiver and sort data by receiver's profile count.
 561 void ciCallProfile::add_receiver(ciKlass* receiver, int receiver_count) {
 562   // Add new receiver and sort data by receiver's counts when we have space
 563   // for it otherwise replace the less called receiver (less called receiver
 564   // is placed to the last array element which is not used).
 565   // First array's element contains most called receiver.
 566   int i = _limit;
 567   for (; i > 0 && receiver_count > _receiver_count[i-1]; i--) {
 568     _receiver[i] = _receiver[i-1];
 569     _receiver_count[i] = _receiver_count[i-1];
 570   }
 571   _receiver[i] = receiver;
 572   _receiver_count[i] = receiver_count;
 573   if (_limit < MorphismLimit) _limit++;
 574 }
 575 
 576 
 577 void ciMethod::assert_virtual_call_type_ok(int bci) {
 578   assert(java_code_at_bci(bci) == Bytecodes::_invokevirtual ||
 579          java_code_at_bci(bci) == Bytecodes::_invokeinterface, err_msg("unexpected bytecode %s", Bytecodes::name(java_code_at_bci(bci))));
 580 }
 581 
 582 void ciMethod::assert_call_type_ok(int bci) {
 583   assert(java_code_at_bci(bci) == Bytecodes::_invokestatic ||
 584          java_code_at_bci(bci) == Bytecodes::_invokespecial ||
 585          java_code_at_bci(bci) == Bytecodes::_invokedynamic, err_msg("unexpected bytecode %s", Bytecodes::name(java_code_at_bci(bci))));
 586 }
 587 
 588 /**
 589  * Check whether profiling provides a type for the argument i to the
 590  * call at bci bci
 591  *
 592  * @param [in]bci         bci of the call
 593  * @param [in]i           argument number
 594  * @param [out]type       profiled type of argument, NULL if none
 595  * @param [out]maybe_null true if null was seen for argument
 596  * @return                true if profiling exists
 597  *
 598  */
 599 bool ciMethod::argument_profiled_type(int bci, int i, ciKlass*& type, bool& maybe_null) {
 600   if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
 601     ciProfileData* data = method_data()->bci_to_data(bci);
 602     if (data != NULL) {
 603       if (data->is_VirtualCallTypeData()) {
 604         assert_virtual_call_type_ok(bci);
 605         ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();




 559 // ------------------------------------------------------------------
 560 // Add new receiver and sort data by receiver's profile count.
 561 void ciCallProfile::add_receiver(ciKlass* receiver, int receiver_count) {
 562   // Add new receiver and sort data by receiver's counts when we have space
 563   // for it otherwise replace the less called receiver (less called receiver
 564   // is placed to the last array element which is not used).
 565   // First array's element contains most called receiver.
 566   int i = _limit;
 567   for (; i > 0 && receiver_count > _receiver_count[i-1]; i--) {
 568     _receiver[i] = _receiver[i-1];
 569     _receiver_count[i] = _receiver_count[i-1];
 570   }
 571   _receiver[i] = receiver;
 572   _receiver_count[i] = receiver_count;
 573   if (_limit < MorphismLimit) _limit++;
 574 }
 575 
 576 
 577 void ciMethod::assert_virtual_call_type_ok(int bci) {
 578   assert(java_code_at_bci(bci) == Bytecodes::_invokevirtual ||
 579          java_code_at_bci(bci) == Bytecodes::_invokeinterface, "unexpected bytecode %s", Bytecodes::name(java_code_at_bci(bci)));
 580 }
 581 
 582 void ciMethod::assert_call_type_ok(int bci) {
 583   assert(java_code_at_bci(bci) == Bytecodes::_invokestatic ||
 584          java_code_at_bci(bci) == Bytecodes::_invokespecial ||
 585          java_code_at_bci(bci) == Bytecodes::_invokedynamic, "unexpected bytecode %s", Bytecodes::name(java_code_at_bci(bci)));
 586 }
 587 
 588 /**
 589  * Check whether profiling provides a type for the argument i to the
 590  * call at bci bci
 591  *
 592  * @param [in]bci         bci of the call
 593  * @param [in]i           argument number
 594  * @param [out]type       profiled type of argument, NULL if none
 595  * @param [out]maybe_null true if null was seen for argument
 596  * @return                true if profiling exists
 597  *
 598  */
 599 bool ciMethod::argument_profiled_type(int bci, int i, ciKlass*& type, bool& maybe_null) {
 600   if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
 601     ciProfileData* data = method_data()->bci_to_data(bci);
 602     if (data != NULL) {
 603       if (data->is_VirtualCallTypeData()) {
 604         assert_virtual_call_type_ok(bci);
 605         ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();


< prev index next >