[clang] [FMV] Emit the resolver along with the default version definition. (PR #84405)

Alexandros Lamprineas via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 15 00:23:50 PDT 2024


================
@@ -4120,6 +4127,9 @@ void CodeGenModule::emitMultiVersionFunctions() {
                                    TA->getArchitecture(), Feats);
             } else {
               const auto *TVA = CurFD->getAttr<TargetVersionAttr>();
+              if (TVA->isDefaultVersion() &&
+                  CurFD->doesThisDeclarationHaveABody())
+                EmitResolver = true;
               llvm::SmallVector<StringRef, 8> Feats;
               TVA->getFeatures(Feats);
               Options.emplace_back(cast<llvm::Function>(Func),
----------------
labrinea wrote:

It is initialized with `!FD->isTargetVersionMultiVersion()` so it is set to true for target clones. However I've just found a bug when we don't have a default definition but we do have a caller in the TU. In that case we should be checking `isUsed()` too. I'll fix this.

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


More information about the cfe-commits mailing list