[clang] [RISCV][FMV] Support target_version (PR #99040)

Piyou Chen via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 17 23:32:04 PDT 2024


================
@@ -11027,13 +11029,27 @@ static bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {
   }
 
   if (TVA) {
-    llvm::SmallVector<StringRef, 8> Feats;
-    TVA->getFeatures(Feats);
-    for (const auto &Feat : Feats) {
-      if (!TargetInfo.validateCpuSupports(Feat)) {
-        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option)
-            << Feature << Feat;
-        return true;
+    if (S.getASTContext().getTargetInfo().getTriple().isRISCV()) {
----------------
BeMg wrote:

I reduce the part of duplication, and the remain part is causing by different syntax between aarch64 and RISC-V.

To reducing the remain part of duplication, we could implement the RISC-V syntax inside `clang/include/clang/Basic/Attr.td getFeatures` or make Aarch64 using the `AArch64TargetInfo::parseTargetAttr` for target_version, or make something like `parseTargetVersionAttr` hook here. 

By the way, the parsing of target_clones syntax is controlled by the target. (Reference: https://github.com/llvm/llvm-project/blob/9cd93774098c861c260090a690f428b7ae031c65/clang/lib/Sema/SemaDeclAttr.cpp#L3121)


https://github.com/llvm/llvm-project/pull/99040


More information about the cfe-commits mailing list