[PATCH] D122952: [clang] NFC: Extend comdat validation in target multiversion function tests.
Tom Honermann via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 12 14:19:39 PDT 2022
tahonermann marked an inline comment as done.
tahonermann added inline comments.
================
Comment at: clang/test/CodeGen/attr-target-mv.c:95-111
+// WINDOWS: $foo_used = comdat any
+// WINDOWS: $foo_used2.avx_sse4.2 = comdat any
+// WINDOWS: $pr50025.resolver = comdat any
+// WINDOWS: $pr50025c.resolver = comdat any
+// WINDOWS: $foo_inline.sse4.2 = comdat any
+// WINDOWS: $foo_inline.arch_ivybridge = comdat any
+// WINDOWS: $foo_inline = comdat any
----------------
erichkeane wrote:
> tahonermann wrote:
> > The non-inline non-resolver cases here are surprising to me; they aren't COMDAT on Linux. Is this intentional?
> I don't think so, we perhaps messed that up.
Actually, I misread the code previously. The non-resolver cases do correspond to `inline` function definitions, so it is on the Linux side that these are emitted as non-COMDAT symbols. Perhaps it has something to do with ELF vs COFF/PE; the linkage and preemption specifiers differ as well (`linkonce` vs `linkonce_odr dso_local` as shown below). At any rate, it isn't clear to me that there is anything that should be changed here.
Linux:
define linkonce void @foo_multi(i32 noundef %i, double noundef %d) #12 {
...
define linkonce void @foo_multi.avx_sse4.2(i32 noundef %i, double noundef %d) #13 {
Windows:
$foo_multi = comdat any
...
$foo_multi.avx_sse4.2 = comdat any
...
define linkonce_odr dso_local void @foo_multi(i32 noundef %i, double noundef %d) #12 comdat {
...
define linkonce_odr dso_local void @foo_multi.avx_sse4.2(i32 noundef %i, double noundef %d) #13 comdat {
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D122952/new/
https://reviews.llvm.org/D122952
More information about the cfe-commits
mailing list