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

Reply via email to