[Flang] remove whole-archive option for AIX linker (#76039)
[llvm-project.git] / clang / test / CodeGenCXX / attr-target-mv-out-of-line-defs.cpp
blob3c56cad3af914a7d90e93c0198386014f39db741
1 // RUN: %clang_cc1 -std=c++11 -triple x86_64-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefixes=ITANIUM,LINUX
2 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-macos -emit-llvm %s -o - | FileCheck %s --check-prefixes=ITANIUM,DARWIN
3 // RUN: %clang_cc1 -std=c++11 -triple x86_64-windows-pc -emit-llvm %s -o - | FileCheck %s --check-prefix=WINDOWS
4 struct S {
5 int __attribute__((target("sse4.2"))) foo(int);
6 int __attribute__((target("arch=sandybridge"))) foo(int);
7 int __attribute__((target("arch=ivybridge"))) foo(int);
8 int __attribute__((target("default"))) foo(int);
9 };
11 int __attribute__((target("default"))) S::foo(int) { return 2; }
12 int __attribute__((target("sse4.2"))) S::foo(int) { return 0; }
13 int __attribute__((target("arch=ivybridge"))) S::foo(int) { return 1; }
15 int bar() {
16 S s;
17 return s.foo(0);
20 // DARWIN-NOT: comdat
22 // ITANIUM: @_ZN1S3fooEi.ifunc = weak_odr ifunc i32 (ptr, i32), ptr @_ZN1S3fooEi.resolver
24 // ITANIUM: define{{.*}} i32 @_ZN1S3fooEi(ptr {{[^,]*}} %this, i32 noundef %0)
25 // ITANIUM: ret i32 2
27 // WINDOWS: define dso_local noundef i32 @"?foo@S@@QEAAHH@Z"(ptr {{[^,]*}} %this, i32 noundef %0)
28 // WINDOWS: ret i32 2
30 // ITANIUM: define{{.*}} i32 @_ZN1S3fooEi.sse4.2(ptr {{[^,]*}} %this, i32 noundef %0)
31 // ITANIUM: ret i32 0
33 // WINDOWS: define dso_local noundef i32 @"?foo@S@@QEAAHH@Z.sse4.2"(ptr {{[^,]*}} %this, i32 noundef %0)
34 // WINDOWS: ret i32 0
36 // ITANIUM: define{{.*}} i32 @_ZN1S3fooEi.arch_ivybridge(ptr {{[^,]*}} %this, i32 noundef %0)
37 // ITANIUM: ret i32 1
39 // WINDOWS: define dso_local noundef i32 @"?foo@S@@QEAAHH@Z.arch_ivybridge"(ptr {{[^,]*}} %this, i32 noundef %0)
40 // WINDOWS: ret i32 1
42 // ITANIUM: define{{.*}} i32 @_Z3barv()
43 // ITANIUM: %s = alloca %struct.S, align 1
44 // ITANIUM: %call = call noundef i32 @_ZN1S3fooEi.ifunc(ptr {{[^,]*}} %s, i32 noundef 0)
46 // WINDOWS: define dso_local noundef i32 @"?bar@@YAHXZ"()
47 // WINDOWS: %s = alloca %struct.S, align 1
48 // WINDOWS: %call = call noundef i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr {{[^,]*}} %s, i32 noundef 0)
50 // ITANIUM: define weak_odr ptr @_ZN1S3fooEi.resolver()
51 // LINUX-SAME: comdat
52 // ITANIUM: ret ptr @_ZN1S3fooEi.arch_sandybridge
53 // ITANIUM: ret ptr @_ZN1S3fooEi.arch_ivybridge
54 // ITANIUM: ret ptr @_ZN1S3fooEi.sse4.2
55 // ITANIUM: ret ptr @_ZN1S3fooEi
57 // WINDOWS: define weak_odr dso_local i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr %0, i32 %1) comdat
58 // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.arch_sandybridge"(ptr %0, i32 %1)
59 // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.arch_ivybridge"(ptr %0, i32 %1)
60 // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.sse4.2"(ptr %0, i32 %1)
61 // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z"(ptr %0, i32 %1)
63 // ITANIUM: declare noundef i32 @_ZN1S3fooEi.arch_sandybridge(ptr {{[^,]*}}, i32 noundef)
65 // WINDOWS: declare dso_local noundef i32 @"?foo@S@@QEAAHH@Z.arch_sandybridge"(ptr {{[^,]*}}, i32 noundef)