xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/dllexport.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i386-pc-win32 < %s \
2*9880d681SAndroid Build Coastguard Worker; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-CL %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i386-pc-mingw32 < %s \
4*9880d681SAndroid Build Coastguard Worker; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-GCC %s
5*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i686-pc-cygwin %s -o - \
6*9880d681SAndroid Build Coastguard Worker; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-GCC %s
7*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i386-pc-win32 < %s \
8*9880d681SAndroid Build Coastguard Worker; RUN:    | FileCheck -check-prefix NOTEXPORTED %s
9*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i386-pc-mingw32 < %s \
10*9880d681SAndroid Build Coastguard Worker; RUN:    | FileCheck -check-prefix NOTEXPORTED %s
11*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple i686-pc-cygwin %s -o - \
12*9880d681SAndroid Build Coastguard Worker; RUN:    | FileCheck -check-prefix NOTEXPORTED %s
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; CHECK: .text
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine void @notExported() {
17*9880d681SAndroid Build Coastguard Worker	ret void
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _f1
21*9880d681SAndroid Build Coastguard Workerdefine dllexport void @f1() {
22*9880d681SAndroid Build Coastguard Worker	ret void
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _f2
26*9880d681SAndroid Build Coastguard Workerdefine dllexport void @f2() unnamed_addr {
27*9880d681SAndroid Build Coastguard Worker	ret void
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdeclare dllexport void @notDefined()
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _stdfun@0
33*9880d681SAndroid Build Coastguard Workerdefine dllexport x86_stdcallcc void @stdfun() nounwind {
34*9880d681SAndroid Build Coastguard Worker	ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; CHECK: .globl @fastfun@0
38*9880d681SAndroid Build Coastguard Workerdefine dllexport x86_fastcallcc i32 @fastfun() nounwind {
39*9880d681SAndroid Build Coastguard Worker	ret i32 0
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _thisfun
43*9880d681SAndroid Build Coastguard Workerdefine dllexport x86_thiscallcc void @thisfun() nounwind {
44*9880d681SAndroid Build Coastguard Worker	ret void
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _lnk1
48*9880d681SAndroid Build Coastguard Workerdefine linkonce_odr dllexport void @lnk1() {
49*9880d681SAndroid Build Coastguard Worker	ret void
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _lnk2
53*9880d681SAndroid Build Coastguard Workerdefine linkonce_odr dllexport void @lnk2() alwaysinline {
54*9880d681SAndroid Build Coastguard Worker	ret void
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _weak1
58*9880d681SAndroid Build Coastguard Workerdefine weak_odr dllexport void @weak1() {
59*9880d681SAndroid Build Coastguard Worker	ret void
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; CHECK: .data
64*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _Var1
65*9880d681SAndroid Build Coastguard Worker@Var1 = dllexport global i32 1, align 4
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK: .rdata,"dr"
68*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _Var2
69*9880d681SAndroid Build Coastguard Worker@Var2 = dllexport unnamed_addr constant i32 1
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; CHECK: .comm _Var3
72*9880d681SAndroid Build Coastguard Worker@Var3 = common dllexport global i32 0, align 4
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _WeakVar1
75*9880d681SAndroid Build Coastguard Worker@WeakVar1 = weak_odr dllexport global i32 1, align 4
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _WeakVar2
78*9880d681SAndroid Build Coastguard Worker@WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _alias
82*9880d681SAndroid Build Coastguard Worker; CHECK: _alias = _notExported
83*9880d681SAndroid Build Coastguard Worker@alias = dllexport alias void(), void()* @notExported
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _alias2
86*9880d681SAndroid Build Coastguard Worker; CHECK: _alias2 = _f1
87*9880d681SAndroid Build Coastguard Worker@alias2 = dllexport alias void(), void()* @f1
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _alias3
90*9880d681SAndroid Build Coastguard Worker; CHECK: _alias3 = _notExported
91*9880d681SAndroid Build Coastguard Worker@alias3 = dllexport alias void(), void()* @notExported
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; CHECK: .weak _weak_alias
94*9880d681SAndroid Build Coastguard Worker; CHECK: _weak_alias = _f1
95*9880d681SAndroid Build Coastguard Worker@weak_alias = weak_odr dllexport alias void(), void()* @f1
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; Verify items that should not be exported do not appear in the export table.
98*9880d681SAndroid Build Coastguard Worker; We use a separate check prefix to avoid confusion between -NOT and -SAME.
99*9880d681SAndroid Build Coastguard Worker; NOTEXPORTED: .section .drectve
100*9880d681SAndroid Build Coastguard Worker; NOTEXPORTED-NOT: notExported
101*9880d681SAndroid Build Coastguard Worker; NOTEXPORTED-NOT: notDefined
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker; CHECK: .section .drectve
104*9880d681SAndroid Build Coastguard Worker; CHECK-CL: /EXPORT:_f1
105*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_f2
106*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_stdfun@0
107*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:@fastfun@0
108*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_thisfun
109*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_lnk1
110*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_lnk2
111*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_weak1
112*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_Var1,DATA
113*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_Var2,DATA
114*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_Var3,DATA
115*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_WeakVar1,DATA
116*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_WeakVar2,DATA
117*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_alias
118*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_alias2
119*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_alias3
120*9880d681SAndroid Build Coastguard Worker; CHECK-CL-SAME: /EXPORT:_weak_alias"
121*9880d681SAndroid Build Coastguard Worker; CHECK-GCC: -export:f1
122*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:f2
123*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:stdfun@0
124*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:@fastfun@0
125*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:thisfun
126*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:lnk1
127*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:lnk2
128*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:weak1
129*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:Var1,data
130*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:Var2,data
131*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:Var3,data
132*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:WeakVar1,data
133*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:WeakVar2,data
134*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:alias
135*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:alias2
136*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:alias3
137*9880d681SAndroid Build Coastguard Worker; CHECK-GCC-SAME: -export:weak_alias"
138