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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits