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.
---
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;
}
--
2.34.1