================
@@ -48,6 +48,19 @@ std::optional<AArch64::ArchInfo> 
AArch64::ArchInfo::findBySubArch(StringRef SubA
   return {};
 }
 
+unsigned AArch64::getFMVPriority(ArrayRef<StringRef> Features) {
+  constexpr unsigned MaxFMVPriority = 1000;
+  unsigned Priority = 0;
+  unsigned NumFeatures = 0;
+  for (StringRef Feature : Features) {
+    if (auto Ext = parseFMVExtension(Feature)) {
+      Priority = std::max(Priority, Ext->Priority);
+      NumFeatures++;
+    }
+  }
+  return Priority + MaxFMVPriority * NumFeatures;
----------------
jroelofs wrote:

We should probably clarify and/or fix the spec, both orders seem like valid 
interpretations to me, as there isn't a definition for how to calculate the 
priority when a version has more than one feature:

> 6.4.3 Selection 
> [^](https://arm-software.github.io/acle/main/acle.html#markdown-toc-selection)
> 
> The following rules shall be followed by all implementations:
> 
> 1. Implementation of the selection algorithm is platform dependent, where 
> with platform means CPU/Vendor/OS as in the target triplet.
> 1. The selection is permanent for the lifetime of the process.
> 1. Only those versions could be considered where all dependent features are 
> available.
>
> Rules of version selection are in order:
> 
> 1. Select the most specific version else
> 1. select the version with the highest priority else
> 1. "default" is selected if no other versions are suitable.

should we ping the gcc folks and get their read on a) how it works for them 
now, and b) how it should work going forward?

https://github.com/llvm/llvm-project/pull/116257
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to