https://gcc.gnu.org/g:7f088e8b49c0be24807fcc0d2811d551b028068f

commit r16-4580-g7f088e8b49c0be24807fcc0d2811d551b028068f
Author: Alfie Richards <[email protected]>
Date:   Tue Oct 7 15:02:46 2025 +0000

    aarch64: Remove unnecessary sort from dispatch_function_versions.
    
    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.
    
    Reviewed-by: Wilco Dijkstra <[email protected]>

Diff:
---
 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 a0da08e3bd53..6f6dea67e0dc 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -21023,45 +21023,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);
+      *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