[clang] [FMV] Emit the resolver along with the default version definition. (PR #84405)
Jon Roelofs via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 15 09:03:39 PDT 2024
================
@@ -4347,6 +4362,19 @@ void CodeGenModule::emitCPUDispatchDefinition(GlobalDecl GD) {
}
}
+/// Adds a declaration to the list of multi version functions if not present.
+void CodeGenModule::AddDeferredMultiVersionResolverToEmit(GlobalDecl GD) {
+ const auto *FD = cast<FunctionDecl>(GD.getDecl());
+ assert(FD && "Not a FunctionDecl?");
+
+ if (FD->isTargetVersionMultiVersion()) {
+ StringRef NamePrefix = getMangledName(GD).split('.').first;
----------------
jroelofs wrote:
`asm`+multiversioning isn't really the point of that argument... sorry, bad example. My point is that the `.` inserted for multi versioning mangling might not be the only one. If you insist on string splitting, it should at least be `rsplit`.
We shouldn't have to rely on string splitting though: `getMangledNameImpl(..., false)` returns the prefix that you need. It is used elsewhere in this multiversioning code to retrieve what the mangled name would be on the function if it did not have the attribute:
https://github.com/llvm/llvm-project/blob/7337db72ed334f8389601f160b762e50c4e61c25/clang/lib/CodeGen/CodeGenModule.cpp#L1857-L1861
https://github.com/llvm/llvm-project/pull/84405
More information about the cfe-commits
mailing list