[clang] [clang][FMV] Do not omit explicit default target_version attribute. (PR #96628)

Tomas Matheson via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 28 08:20:39 PDT 2024


================
@@ -11523,10 +11525,17 @@ static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD,
   const auto *OldTVA = OldFD->getAttr<TargetVersionAttr>();
   // If the old decl is NOT MultiVersioned yet, and we don't cause that
   // to change, this is a simple redeclaration.
-  if ((NewTA && !NewTA->isDefaultVersion() &&
-       (!OldTA || OldTA->getFeaturesStr() == NewTA->getFeaturesStr())) ||
-      (NewTVA && !NewTVA->isDefaultVersion() &&
-       (!OldTVA || OldTVA->getName() == NewTVA->getName())))
+  if (NewTA && !NewTA->isDefaultVersion() &&
+      (!OldTA || OldTA->getFeaturesStr() == NewTA->getFeaturesStr()))
+    return false;
+
+  // The target_version attribute only causes Multiversioning if this
+  // declaration is NOT the default version. Moreover, the old declaration
+  // must be the default version (either explicitly via the attribute,
+  // or implicitly without it).
+  if (NewTVA && NewTVA->isDefaultVersion())
+    return false;
----------------
tmatheson-arm wrote:

```suggestion
  // If this is target_version("default") (implicit or explicit) it doesn't trigger MV
  if (!NewTVA || NewTVA->isDefaultVersion())
    return false;
```
This is my understanding of what we want to do here.

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


More information about the cfe-commits mailing list