xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-tls-variables-ppc32.ll (revision 1756b2adc9c1590a4a0c333d659fe7f5f80ce9fd)
1; This file tests 32 bit TLS variable generation.
2
3; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple \
4; RUN:      powerpc-ibm-aix-xcoff < %s | FileCheck %s
5; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple \
6; RUN:      powerpc-ibm-aix-xcoff -data-sections=false < %s | FileCheck %s \
7; RUN:      --check-prefix=NODATASEC
8
9; When data-sections is true (default), we emit data into separate sections.
10; When data-sections is false, we emit data into the .data / .tdata sections.
11
12; Int global variable, TLS/Non-TLS, local/external/weak/common linkage
13; CHECK:           .csect  global_int_external_val_initialized[RW],2
14; CHECK-NEXT:      .globl  global_int_external_val_initialized[RW]
15; CHECK-NEXT:      .align  2
16; CHECK-NEXT:      .vbyte  4, 1
17
18; NODATASEC:       .csect  .data[RW],3
19; NODATASEC-NEXT:  .globl  global_int_external_val_initialized
20; NODATASEC-NEXT:  .align  2
21; NODATASEC-NEXT:global_int_external_val_initialized:
22; NODATASEC-NEXT:  .vbyte  4, 1
23@global_int_external_val_initialized = global i32 1, align 4
24
25; CHECK-NEXT:      .csect  global_int_external_zero_initialized[RW],2
26; CHECK-NEXT:      .globl  global_int_external_zero_initialized[RW]
27; CHECK-NEXT:      .align  2
28; CHECK-NEXT:      .vbyte  4, 0
29
30; NODATASEC-NEXT:  .globl  global_int_external_zero_initialized
31; NODATASEC-NEXT:  .align  2
32; NODATASEC-NEXT:global_int_external_zero_initialized:
33; NODATASEC-NEXT:  .vbyte  4, 0
34@global_int_external_zero_initialized = global i32 0, align 4
35
36; CHECK-NEXT:      .csect  tls_global_int_external_val_initialized[TL],2
37; CHECK-NEXT:      .globl  tls_global_int_external_val_initialized[TL]
38; CHECK-NEXT:      .align  2
39; CHECK-NEXT:      .vbyte  4, 1
40
41; NODATASEC-NEXT:  .csect  .tdata[TL],3
42; NODATASEC-NEXT:  .globl  tls_global_int_external_val_initialized
43; NODATASEC-NEXT:  .align  2
44; NODATASEC-NEXT:tls_global_int_external_val_initialized:
45; NODATASEC-NEXT:  .vbyte  4, 1
46@tls_global_int_external_val_initialized = thread_local global i32 1, align 4
47
48; CHECK-NEXT:      .csect  tls_global_int_external_zero_initialized[TL],2
49; CHECK-NEXT:      .globl  tls_global_int_external_zero_initialized[TL]
50; CHECK-NEXT:      .align  2
51; CHECK-NEXT:      .vbyte  4, 0
52
53; NODATASEC-NEXT:  .globl  tls_global_int_external_zero_initialized
54; NODATASEC-NEXT:  .align  2
55; NODATASEC-NEXT:tls_global_int_external_zero_initialized:
56; NODATASEC-NEXT:  .vbyte  4, 0
57@tls_global_int_external_zero_initialized = thread_local global i32 0, align 4
58
59; CHECK-NEXT:      .csect  global_int_local_val_initialized[RW],2
60; CHECK-NEXT:      .lglobl global_int_local_val_initialized[RW]
61; CHECK-NEXT:      .align  2
62; CHECK-NEXT:      .vbyte  4, 2
63
64; NODATASEC-NEXT:  .csect .data[RW],3
65; NODATASEC-NEXT:  .lglobl global_int_local_val_initialized
66; NODATASEC-NEXT:  .align  2
67; NODATASEC-NEXT:global_int_local_val_initialized:
68; NODATASEC-NEXT:  .vbyte  4, 2
69@global_int_local_val_initialized = internal global i32 2, align 4
70
71; CHECK-NEXT:      .csect  tls_global_int_local_val_initialized[TL],2
72; CHECK-NEXT:      .lglobl tls_global_int_local_val_initialized[TL]
73; CHECK-NEXT:      .align  2
74; CHECK-NEXT:      .vbyte  4, 2
75
76; NODATASEC-NEXT:  .csect  .tdata[TL],3
77; NODATASEC-NEXT:  .lglobl tls_global_int_local_val_initialized
78; NODATASEC-NEXT:  .align  2
79; NODATASEC-NEXT:tls_global_int_local_val_initialized:
80; NODATASEC-NEXT:  .vbyte  4, 2
81@tls_global_int_local_val_initialized = internal thread_local global i32 2, align 4
82
83; CHECK-NEXT:      .lcomm  global_int_local_zero_initialized,4,global_int_local_zero_initialized[BS],2
84; NODATASEC-NEXT:  .lcomm  global_int_local_zero_initialized,4,global_int_local_zero_initialized[BS],2
85@global_int_local_zero_initialized = internal global i32 0, align 4
86
87; CHECK-NEXT:      .lcomm  tls_global_int_local_zero_initialized,4,tls_global_int_local_zero_initialized[UL],2
88; NODATASEC-NEXT:  .lcomm  tls_global_int_local_zero_initialized,4,tls_global_int_local_zero_initialized[UL],2
89@tls_global_int_local_zero_initialized = internal thread_local global i32 0, align 4
90
91; CHECK-NEXT:      .csect  global_int_weak_zero_initialized[RW],2
92; CHECK-NEXT:      .weak   global_int_weak_zero_initialized[RW]
93; CHECK-NEXT:      .align  2
94; CHECK-NEXT:      .vbyte  4, 0
95
96; NODATASEC-NEXT:  .csect  .data[RW],3
97; NODATASEC-NEXT:  .weak   global_int_weak_zero_initialized
98; NODATASEC-NEXT:  .align  2
99; NODATASEC-NEXT:global_int_weak_zero_initialized:
100; NODATASEC-NEXT:  .vbyte  4, 0
101@global_int_weak_zero_initialized = weak global i32 0, align 4
102
103; CHECK-NEXT:      .csect  tls_global_int_weak_zero_initialized[TL],2
104; CHECK-NEXT:      .weak   tls_global_int_weak_zero_initialized[TL]
105; CHECK-NEXT:      .align  2
106; CHECK-NEXT:      .vbyte  4, 0
107
108; NODATASEC-NEXT:  .csect  .tdata[TL],3
109; NODATASEC-NEXT:  .weak   tls_global_int_weak_zero_initialized
110; NODATASEC-NEXT:  .align  2
111; NODATASEC-NEXT:tls_global_int_weak_zero_initialized:
112; NODATASEC-NEXT:  .vbyte  4, 0
113@tls_global_int_weak_zero_initialized = weak thread_local global i32 0, align 4
114
115; CHECK-NEXT:      .comm   global_int_common_zero_initialized[RW],4,2
116; NODATASEC-NEXT:  .comm   global_int_common_zero_initialized[RW],4,2
117@global_int_common_zero_initialized = common global i32 0, align 4
118
119; CHECK-NEXT:      .comm   tls_global_int_common_zero_initialized[UL],4,2
120; NODATASEC-NEXT:  .comm   tls_global_int_common_zero_initialized[UL],4,2
121@tls_global_int_common_zero_initialized = common thread_local global i32 0, align 4
122
123; CHECK-NEXT:      .csect  global_int_weak_val_initialized[RW],2
124; CHECK-NEXT:      .weak   global_int_weak_val_initialized[RW]
125; CHECK-NEXT:      .align  2
126; CHECK-NEXT:      .vbyte  4, 1
127
128; NODATASEC-NEXT:  .csect  .data[RW],3
129; NODATASEC-NEXT:  .weak   global_int_weak_val_initialized
130; NODATASEC-NEXT:  .align  2
131; NODATASEC-NEXT:global_int_weak_val_initialized:
132; NODATASEC-NEXT:  .vbyte  4, 1
133@global_int_weak_val_initialized = weak global i32 1, align 4
134
135; CHECK-NEXT:      .csect  tls_global_int_weak_val_initialized[TL],2
136; CHECK-NEXT:      .weak   tls_global_int_weak_val_initialized[TL]
137; CHECK-NEXT:      .align  2
138; CHECK-NEXT:      .vbyte  4, 1
139
140; NODATASEC-NEXT:  .csect  .tdata[TL],3
141; NODATASEC-NEXT:  .weak   tls_global_int_weak_val_initialized
142; NODATASEC-NEXT:  .align  2
143; NODATASEC-NEXT:tls_global_int_weak_val_initialized:
144; NODATASEC-NEXT:  .vbyte  4, 1
145@tls_global_int_weak_val_initialized = weak thread_local global i32 1, align 4
146
147; CHECK-NEXT:      .extern global_int_external_uninitialized[UA]
148; NODATASEC-NEXT:  .extern global_int_external_uninitialized[UA]
149@global_int_external_uninitialized = external global i32, align 4
150
151; CHECK-NEXT:      .extern tls_global_int_external_uninitialized[UL]
152; NODATASEC-NEXT:  .extern tls_global_int_external_uninitialized[UL]
153@tls_global_int_external_uninitialized = external thread_local global i32, align 4
154
155
156; double global variable, TLS/Non-TLS, common/external linkage
157
158; CHECK-NEXT:      .comm   global_double_common_zero_initialized[RW],8,3
159; NODATASEC-NEXT:  .comm   global_double_common_zero_initialized[RW],8,3
160@global_double_common_zero_initialized = common global double 0.000000e+00, align 8
161
162; CHECK-NEXT:      .comm   tls_global_double_common_zero_initialized[UL],8,3
163; NODATASEC-NEXT:  .comm   tls_global_double_common_zero_initialized[UL],8,3
164@tls_global_double_common_zero_initialized = common thread_local global double 0.000000e+00, align 8
165
166; CHECK-NEXT:      .extern global_double_external_uninitialized[UA]
167; NODATASEC-NEXT:  .extern global_double_external_uninitialized[UA]
168@global_double_external_uninitialized = external global i64, align 8
169
170; CHECK-NEXT:      .extern tls_global_double_external_uninitialized[UL]
171; NODATASEC-NEXT:  .extern tls_global_double_external_uninitialized[UL]
172@tls_global_double_external_uninitialized = external thread_local global i64, align 8
173
174
175; Long long global variable, TLS/Non-TLS, local/weak linkage
176
177; CHECK-NEXT:      .csect  global_long_long_internal_val_initialized[RW],3
178; CHECK-NEXT:      .lglobl global_long_long_internal_val_initialized[RW]
179; CHECK-NEXT:      .align  3
180; CHECK-NEXT:      .vbyte  4, 0
181; CHECK-NEXT:      .vbyte  4, 1
182; NODATASEC-NEXT:  .csect  .data[RW],3
183; NODATASEC-NEXT:  .lglobl global_long_long_internal_val_initialized
184; NODATASEC-NEXT:  .align  3
185; NODATASEC-NEXT:global_long_long_internal_val_initialized:
186; NODATASEC-NEXT:  .vbyte  4, 0
187; NODATASEC-NEXT:  .vbyte  4, 1
188@global_long_long_internal_val_initialized = internal global i64 1, align 8
189
190; CHECK-NEXT:      .csect  tls_global_long_long_internal_val_initialized[TL],3
191; CHECK-NEXT:      .lglobl tls_global_long_long_internal_val_initialized[TL]
192; CHECK-NEXT:      .align  3
193; CHECK-NEXT:      .vbyte  4, 0
194; CHECK-NEXT:      .vbyte  4, 1
195; NODATASEC-NEXT:  .csect  .tdata[TL],3
196; NODATASEC-NEXT:  .lglobl tls_global_long_long_internal_val_initialized
197; NODATASEC-NEXT:  .align  3
198; NODATASEC-NEXT:tls_global_long_long_internal_val_initialized:
199; NODATASEC-NEXT:  .vbyte  4, 0
200; NODATASEC-NEXT:  .vbyte  4, 1
201@tls_global_long_long_internal_val_initialized = internal thread_local global i64 1, align 8
202
203; CHECK-NEXT:      .lcomm  global_long_long_internal_zero_initialized,8,global_long_long_internal_zero_initialized[BS],3
204; NODATASEC-NEXT:  .lcomm  global_long_long_internal_zero_initialized,8,global_long_long_internal_zero_initialized[BS],3
205@global_long_long_internal_zero_initialized = internal global i64 0, align 8
206
207; CHECK-NEXT:      .lcomm  tls_global_long_long_internal_zero_initialized,8,tls_global_long_long_internal_zero_initialized[UL],3
208; NODATASEC-NEXT:  .lcomm  tls_global_long_long_internal_zero_initialized,8,tls_global_long_long_internal_zero_initialized[UL],3
209@tls_global_long_long_internal_zero_initialized = internal thread_local global i64 0, align 8
210
211; CHECK-NEXT:      .csect  global_long_long_weak_val_initialized[RW],3
212; CHECK-NEXT:      .weak   global_long_long_weak_val_initialized[RW]
213; CHECK-NEXT:      .align  3
214; CHECK-NEXT:      .vbyte  4, 0
215; CHECK-NEXT:      .vbyte  4, 1
216; NODATASEC-NEXT:  .csect  .data[RW],3
217; NODATASEC-NEXT:  .weak   global_long_long_weak_val_initialized
218; NODATASEC-NEXT:  .align  3
219; NODATASEC-NEXT:global_long_long_weak_val_initialized:
220; NODATASEC-NEXT:  .vbyte  4, 0
221; NODATASEC-NEXT:  .vbyte  4, 1
222@global_long_long_weak_val_initialized = weak global i64 1, align 8
223
224; CHECK-NEXT:      .csect  tls_global_long_long_weak_val_initialized[TL],3
225; CHECK-NEXT:      .weak   tls_global_long_long_weak_val_initialized[TL]
226; CHECK-NEXT:      .align  3
227; CHECK-NEXT:      .vbyte  4, 0
228; CHECK-NEXT:      .vbyte  4, 1
229; NODATASEC-NEXT:  .csect  .tdata[TL],3
230; NODATASEC-NEXT:  .weak   tls_global_long_long_weak_val_initialized
231; NODATASEC-NEXT:  .align  3
232; NODATASEC-NEXT:tls_global_long_long_weak_val_initialized:
233; NODATASEC-NEXT:  .vbyte  4, 0
234; NODATASEC-NEXT:  .vbyte  4, 1
235@tls_global_long_long_weak_val_initialized = weak thread_local global i64 1, align 8
236
237; CHECK-NEXT:      .csect  global_long_long_weak_zero_initialized[RW],3
238; CHECK-NEXT:      .weak   global_long_long_weak_zero_initialized[RW]
239; CHECK-NEXT:      .align  3
240; CHECK-NEXT:      .vbyte  4, 0
241; CHECK-NEXT:      .vbyte  4, 0
242; NODATASEC-NEXT:  .csect  .data[RW],3
243; NODATASEC-NEXT:  .weak   global_long_long_weak_zero_initialized
244; NODATASEC-NEXT:  .align  3
245; NODATASEC-NEXT:global_long_long_weak_zero_initialized:
246; NODATASEC-NEXT:  .vbyte  4, 0
247; NODATASEC-NEXT:  .vbyte  4, 0
248@global_long_long_weak_zero_initialized = weak global i64 0, align 8
249
250; CHECK-NEXT:      .csect  tls_global_long_long_weak_zero_initialized[TL],3
251; CHECK-NEXT:      .weak   tls_global_long_long_weak_zero_initialized[TL]
252; CHECK-NEXT:      .align  3
253; CHECK-NEXT:      .vbyte  4, 0
254; CHECK-NEXT:      .vbyte  4, 0
255; NODATASEC-NEXT:  .csect  .tdata[TL],3
256; NODATASEC-NEXT:  .weak   tls_global_long_long_weak_zero_initialized
257; NODATASEC-NEXT:  .align  3
258; NODATASEC-NEXT:tls_global_long_long_weak_zero_initialized:
259; NODATASEC-NEXT:  .vbyte  4, 0
260; NODATASEC-NEXT:  .vbyte  4, 0
261@tls_global_long_long_weak_zero_initialized = weak thread_local global i64 0, align 8
262