< 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 >