[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