< prev index next >
src/share/vm/ci/ciMethod.cpp
Print this page
*** 592,626 ****
* call at bci bci
*
* @param [in]bci bci of the call
* @param [in]i argument number
* @param [out]type profiled type of argument, NULL if none
! * @param [out]maybe_null true if null was seen for argument
* @return true if profiling exists
*
*/
! bool ciMethod::argument_profiled_type(int bci, int i, ciKlass*& type, bool& maybe_null) {
if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
ciProfileData* data = method_data()->bci_to_data(bci);
if (data != NULL) {
if (data->is_VirtualCallTypeData()) {
assert_virtual_call_type_ok(bci);
ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();
if (i >= call->number_of_arguments()) {
return false;
}
type = call->valid_argument_type(i);
! maybe_null = call->argument_maybe_null(i);
return true;
} else if (data->is_CallTypeData()) {
assert_call_type_ok(bci);
ciCallTypeData* call = (ciCallTypeData*)data->as_CallTypeData();
if (i >= call->number_of_arguments()) {
return false;
}
type = call->valid_argument_type(i);
! maybe_null = call->argument_maybe_null(i);
return true;
}
}
}
return false;
--- 592,626 ----
* call at bci bci
*
* @param [in]bci bci of the call
* @param [in]i argument number
* @param [out]type profiled type of argument, NULL if none
! * @param [out]ptr_kind whether always null, never null or maybe null
* @return true if profiling exists
*
*/
! bool ciMethod::argument_profiled_type(int bci, int i, ciKlass*& type, ProfilePtrKind& ptr_kind) {
if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
ciProfileData* data = method_data()->bci_to_data(bci);
if (data != NULL) {
if (data->is_VirtualCallTypeData()) {
assert_virtual_call_type_ok(bci);
ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();
if (i >= call->number_of_arguments()) {
return false;
}
type = call->valid_argument_type(i);
! ptr_kind = call->argument_ptr_kind(i);
return true;
} else if (data->is_CallTypeData()) {
assert_call_type_ok(bci);
ciCallTypeData* call = (ciCallTypeData*)data->as_CallTypeData();
if (i >= call->number_of_arguments()) {
return false;
}
type = call->valid_argument_type(i);
! ptr_kind = call->argument_ptr_kind(i);
return true;
}
}
}
return false;
*** 630,658 ****
* Check whether profiling provides a type for the return value from
* the call at bci bci
*
* @param [in]bci bci of the call
* @param [out]type profiled type of argument, NULL if none
! * @param [out]maybe_null true if null was seen for argument
* @return true if profiling exists
*
*/
! bool ciMethod::return_profiled_type(int bci, ciKlass*& type, bool& maybe_null) {
if (MethodData::profile_return() && method_data() != NULL && method_data()->is_mature()) {
ciProfileData* data = method_data()->bci_to_data(bci);
if (data != NULL) {
if (data->is_VirtualCallTypeData()) {
assert_virtual_call_type_ok(bci);
ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();
type = call->valid_return_type();
! maybe_null = call->return_maybe_null();
return true;
} else if (data->is_CallTypeData()) {
assert_call_type_ok(bci);
ciCallTypeData* call = (ciCallTypeData*)data->as_CallTypeData();
type = call->valid_return_type();
! maybe_null = call->return_maybe_null();
return true;
}
}
}
return false;
--- 630,662 ----
* Check whether profiling provides a type for the return value from
* the call at bci bci
*
* @param [in]bci bci of the call
* @param [out]type profiled type of argument, NULL if none
! * @param [out]ptr_kind whether always null, never null or maybe null
* @return true if profiling exists
*
*/
! bool ciMethod::return_profiled_type(int bci, ciKlass*& type, ProfilePtrKind& ptr_kind) {
if (MethodData::profile_return() && method_data() != NULL && method_data()->is_mature()) {
ciProfileData* data = method_data()->bci_to_data(bci);
if (data != NULL) {
if (data->is_VirtualCallTypeData()) {
assert_virtual_call_type_ok(bci);
ciVirtualCallTypeData* call = (ciVirtualCallTypeData*)data->as_VirtualCallTypeData();
+ if (call->has_return()) {
type = call->valid_return_type();
! ptr_kind = call->return_ptr_kind();
return true;
+ }
} else if (data->is_CallTypeData()) {
assert_call_type_ok(bci);
ciCallTypeData* call = (ciCallTypeData*)data->as_CallTypeData();
+ if (call->has_return()) {
type = call->valid_return_type();
! ptr_kind = call->return_ptr_kind();
! }
return true;
}
}
}
return false;
*** 661,680 ****
/**
* Check whether profiling provides a type for the parameter i
*
* @param [in]i parameter number
* @param [out]type profiled type of parameter, NULL if none
! * @param [out]maybe_null true if null was seen for parameter
* @return true if profiling exists
*
*/
! bool ciMethod::parameter_profiled_type(int i, ciKlass*& type, bool& maybe_null) {
if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
ciParametersTypeData* parameters = method_data()->parameters_type_data();
if (parameters != NULL && i < parameters->number_of_parameters()) {
type = parameters->valid_parameter_type(i);
! maybe_null = parameters->parameter_maybe_null(i);
return true;
}
}
return false;
}
--- 665,684 ----
/**
* Check whether profiling provides a type for the parameter i
*
* @param [in]i parameter number
* @param [out]type profiled type of parameter, NULL if none
! * @param [out]ptr_kind whether always null, never null or maybe null
* @return true if profiling exists
*
*/
! bool ciMethod::parameter_profiled_type(int i, ciKlass*& type, ProfilePtrKind& ptr_kind) {
if (MethodData::profile_parameters() && method_data() != NULL && method_data()->is_mature()) {
ciParametersTypeData* parameters = method_data()->parameters_type_data();
if (parameters != NULL && i < parameters->number_of_parameters()) {
type = parameters->valid_parameter_type(i);
! ptr_kind = parameters->parameter_ptr_kind(i);
return true;
}
}
return false;
}
< prev index next >