Hi Alfie, On 10/8/25 14:57, [email protected] wrote:
From: Alfie Richards <[email protected]>The version data-structure already stores the versions in a sorted order so sorting here is unnecessary. gcc/ChangeLog: * config/aarch64/aarch64.cc (dispatch_function_versions): Remove unnecessary sorting and data structure.
Looks good. OK. Cheers, Wilco
--- gcc/config/aarch64/aarch64.cc | 43 ++++++----------------------------- 1 file changed, 7 insertions(+), 36 deletions(-) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index e16f0c25eb9..3f341f33f0a 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -21025,45 +21025,16 @@ dispatch_function_versions (tree dispatch_decl, unsigned int num_versions = fndecls->length (); gcc_assert (num_versions >= 2);- struct function_version_info- { - tree version_decl; - aarch64_fmv_feature_mask feature_mask; - } *function_versions; - - function_versions = (struct function_version_info *) - XNEWVEC (struct function_version_info, (num_versions)); - - unsigned int actual_versions = 0; - - for (tree version_decl : *fndecls) + int i; + tree version_decl; + FOR_EACH_VEC_ELT_REVERSE ((*fndecls), i, version_decl) { - aarch64_fmv_feature_mask feature_mask; - /* Get attribute string, parse it and find the right features. */ - feature_mask = get_feature_mask_for_version (version_decl); - function_versions [actual_versions].version_decl = version_decl; - function_versions [actual_versions].feature_mask = feature_mask; - actual_versions++; + aarch64_fmv_feature_mask feature_mask + = get_feature_mask_for_version (version_decl, NULL); + *empty_bb = add_condition_to_bb (dispatch_decl, version_decl, + feature_mask, mask_var, *empty_bb); }- auto compare_feature_version_info = [](const void *p1, const void *p2) {- const function_version_info v1 = *(const function_version_info *)p1; - const function_version_info v2 = *(const function_version_info *)p2; - return - compare_feature_masks (v1.feature_mask, v2.feature_mask); - }; - - /* Sort the versions according to descending order of dispatch priority. */ - qsort (function_versions, actual_versions, - sizeof (struct function_version_info), compare_feature_version_info); - - for (unsigned int i = 0; i < actual_versions; ++i) - *empty_bb = add_condition_to_bb (dispatch_decl, - function_versions[i].version_decl, - function_versions[i].feature_mask, - mask_var, - *empty_bb); - - free (function_versions); return 0; }
