Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / PowerPC / aix-tls-ie-xcoff-reloc.ll
blobe34bb130d5ed21260fbf681d639da13adef83725
1 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc64-ibm-aix-xcoff \
2 ; RUN:   -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s
3 ; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefix=REL64 %s
4 ; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM64 %s
5 ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck --check-prefix=DIS64 %s
7 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc64-ibm-aix-xcoff -code-model=small \
8 ; RUN:   -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s
9 ; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefix=REL64 %s
10 ; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM64 %s
11 ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck --check-prefix=DIS64 %s
13 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc-ibm-aix-xcoff \
14 ; RUN:   -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s
15 ; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefix=REL32 %s
16 ; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM32 %s
17 ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck --check-prefix=DIS32 %s
19 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mtriple=powerpc-ibm-aix-xcoff -code-model=small \
20 ; RUN:   -xcoff-traceback-table=false -data-sections=false -filetype=obj -o %t.o < %s
21 ; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefix=REL32 %s
22 ; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefix=SYM32 %s
23 ; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck --check-prefix=DIS32 %s
25 @global_int_nonzero = thread_local(initialexec) global i32 1, align 4
26 @intern_int_zero = internal thread_local(initialexec) global i32 0, align 4
28 define void @store_intern_int_zero(i32 noundef signext %i) {
29 entry:
30   %addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @intern_int_zero)
31   store i32 %i, ptr %addr, align 4
32   ret void
35 define signext i32 @load_global_int_nonzero() {
36 entry:
37   %addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @global_int_nonzero)
38   %val = load i32, ptr %addr, align 4
39   ret i32 %val
42 define signext i32 @load_intern_int_zero() {
43 entry:
44   %addr = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @intern_int_zero)
45   %val = load i32, ptr %addr, align 4
46   ret i32 %val
49 declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull)
51 ; REL64:      File: {{.*}}aix-tls-ie-xcoff-reloc.ll.tmp.o
52 ; REL64-NEXT: Format: aix5coff64-rs6000
53 ; REL64-NEXT: Arch: powerpc64
54 ; REL64-NEXT: AddressSize: 64bit
55 ; REL64-NEXT: Relocations [
56 ; REL64:       Virtual Address: 0x2
57 ; REL64-NEXT:       Symbol: intern_int_zero (17)
58 ; REL64-NEXT:       IsSigned: No
59 ; REL64-NEXT:       FixupBitValue: 0
60 ; REL64-NEXT:       Length: 16
61 ; REL64-NEXT:       Type: R_TOC (0x3)
62 ; REL64-NEXT:     }
63 ; REL64:       Virtual Address: 0x12
64 ; REL64-NEXT:       Symbol: global_int_nonzero (19)
65 ; REL64-NEXT:       IsSigned: No
66 ; REL64-NEXT:       FixupBitValue: 0
67 ; REL64-NEXT:       Length: 16
68 ; REL64-NEXT:       Type: R_TOC (0x3)
69 ; REL64-NEXT:     }
70 ; REL64:       Virtual Address: 0x22
71 ; REL64-NEXT:       Symbol: intern_int_zero (17)
72 ; REL64-NEXT:       IsSigned: No
73 ; REL64-NEXT:       FixupBitValue: 0
74 ; REL64-NEXT:       Length: 16
75 ; REL64-NEXT:       Type: R_TOC (0x3)
76 ; REL64-NEXT:     }
77 ; REL64:       Virtual Address: 0x78
78 ; REL64-NEXT:       Symbol: intern_int_zero (25)
79 ; REL64-NEXT:       IsSigned: No
80 ; REL64-NEXT:       FixupBitValue: 0
81 ; REL64-NEXT:       Length: 64
82 ; REL64-NEXT:       Type: R_TLS_IE (0x21)
83 ; REL64-NEXT:     }
84 ; REL64:       Virtual Address: 0x80
85 ; REL64-NEXT:       Symbol: global_int_nonzero (23)
86 ; REL64-NEXT:       IsSigned: No
87 ; REL64-NEXT:       FixupBitValue: 0
88 ; REL64-NEXT:       Length: 64
89 ; REL64-NEXT:       Type: R_TLS_IE (0x21)
90 ; REL64-NEXT:     }
92 ; SYM64:      File: {{.*}}aix-tls-ie-xcoff-reloc.ll.tmp.o
93 ; SYM64-NEXT: Format: aix5coff64-rs6000
94 ; SYM64-NEXT: Arch: powerpc64
95 ; SYM64-NEXT: AddressSize: 64bit
96 ; SYM64-NEXT: Symbols [
97 ; SYM64:     Index: 17
98 ; SYM64-NEXT:     Name: intern_int_zero
99 ; SYM64-NEXT:     Value (RelocatableAddress): 0x78
100 ; SYM64-NEXT:     Section: .data
101 ; SYM64-NEXT:     Type: 0x0
102 ; SYM64-NEXT:     StorageClass: C_HIDEXT (0x6B)
103 ; SYM64-NEXT:     NumberOfAuxEntries: 1
104 ; SYM64-NEXT:     CSECT Auxiliary Entry {
105 ; SYM64-NEXT:       Index: 18
106 ; SYM64-NEXT:       SectionLen: 8
107 ; SYM64-NEXT:       ParameterHashIndex: 0x0
108 ; SYM64-NEXT:       TypeChkSectNum: 0x0
109 ; SYM64-NEXT:       SymbolAlignmentLog2: 3
110 ; SYM64-NEXT:       SymbolType: XTY_SD (0x1)
111 ; SYM64-NEXT:       StorageMappingClass: XMC_TC (0x3)
112 ; SYM64-NEXT:       Auxiliary Type: AUX_CSECT (0xFB)
113 ; SYM64-NEXT:     }
114 ; SYM64-NEXT:   }
115 ; SYM64:     Index: 19
116 ; SYM64-NEXT:     Name: global_int_nonzero
117 ; SYM64-NEXT:     Value (RelocatableAddress): 0x80
118 ; SYM64-NEXT:     Section: .data
119 ; SYM64-NEXT:     Type: 0x0
120 ; SYM64-NEXT:     StorageClass: C_HIDEXT (0x6B)
121 ; SYM64-NEXT:     NumberOfAuxEntries: 1
122 ; SYM64-NEXT:     CSECT Auxiliary Entry {
123 ; SYM64-NEXT:       Index: 20
124 ; SYM64-NEXT:       SectionLen: 8
125 ; SYM64-NEXT:       ParameterHashIndex: 0x0
126 ; SYM64-NEXT:       TypeChkSectNum: 0x0
127 ; SYM64-NEXT:       SymbolAlignmentLog2: 3
128 ; SYM64-NEXT:       SymbolType: XTY_SD (0x1)
129 ; SYM64-NEXT:       StorageMappingClass: XMC_TC (0x3)
130 ; SYM64-NEXT:       Auxiliary Type: AUX_CSECT (0xFB)
131 ; SYM64-NEXT:     }
132 ; SYM64-NEXT:   }
133 ; SYM64:     Index: 23
134 ; SYM64-NEXT:     Name: global_int_nonzero
135 ; SYM64-NEXT:     Value (RelocatableAddress): 0x0
136 ; SYM64-NEXT:     Section: .tdata
137 ; SYM64-NEXT:     Type: 0x0
138 ; SYM64-NEXT:     StorageClass: C_EXT (0x2)
139 ; SYM64-NEXT:     NumberOfAuxEntries: 1
140 ; SYM64-NEXT:     CSECT Auxiliary Entry {
141 ; SYM64-NEXT:       Index: 24
142 ; SYM64-NEXT:       ContainingCsectSymbolIndex: 21
143 ; SYM64-NEXT:       ParameterHashIndex: 0x0
144 ; SYM64-NEXT:       TypeChkSectNum: 0x0
145 ; SYM64-NEXT:       SymbolAlignmentLog2: 0
146 ; SYM64-NEXT:       SymbolType: XTY_LD (0x2)
147 ; SYM64-NEXT:       StorageMappingClass: XMC_TL (0x14)
148 ; SYM64-NEXT:       Auxiliary Type: AUX_CSECT (0xFB)
149 ; SYM64-NEXT:     }
150 ; SYM64-NEXT:   }
151 ; SYM64:     Index: 25
152 ; SYM64-NEXT:     Name: intern_int_zero
153 ; SYM64-NEXT:     Value (RelocatableAddress): 0x4
154 ; SYM64-NEXT:     Section: .tbss
155 ; SYM64-NEXT:     Type: 0x0
156 ; SYM64-NEXT:     StorageClass: C_HIDEXT (0x6B)
157 ; SYM64-NEXT:     NumberOfAuxEntries: 1
158 ; SYM64-NEXT:     CSECT Auxiliary Entry {
159 ; SYM64-NEXT:       Index: 26
160 ; SYM64-NEXT:       SectionLen: 4
161 ; SYM64-NEXT:       ParameterHashIndex: 0x0
162 ; SYM64-NEXT:       TypeChkSectNum: 0x0
163 ; SYM64-NEXT:       SymbolAlignmentLog2: 2
164 ; SYM64-NEXT:       SymbolType: XTY_CM (0x3)
165 ; SYM64-NEXT:       StorageMappingClass: XMC_UL (0x15)
166 ; SYM64-NEXT:       Auxiliary Type: AUX_CSECT (0xFB)
167 ; SYM64-NEXT:     }
168 ; SYM64-NEXT:   }
170 ; DIS64: {{.*}}aix-tls-ie-xcoff-reloc.ll.tmp.o: file format aix5coff64-rs6000
171 ; DIS64: Disassembly of section .text:
172 ; DIS64: (idx: 3) .store_intern_int_zero:
173 ; DIS64-NEXT: ld 4, 0(2)
174 ; DIS64-NEXT: (idx: 17) intern_int_zero[TC]
175 ; DIS64-NEXT: stwx 3, 13, 4
176 ; DIS64-NEXT: blr
177 ; DIS64: (idx: 5) .load_global_int_nonzero:
178 ; DIS64-NEXT: ld 3, 8(2)
179 ; DIS64-NEXT: (idx: 19) global_int_nonzero[TC]
180 ; DIS64-NEXT: lwax 3, 13, 3
181 ; DIS64-NEXT: blr
182 ; DIS64: (idx: 7) .load_intern_int_zero:
183 ; DIS64-NEXT: ld 3, 0(2)
184 ; DIS64-NEXT: (idx: 17) intern_int_zero[TC]
185 ; DIS64-NEXT: lwax 3, 13, 3
186 ; DIS64-NEXT: blr
188 ; DIS64: Disassembly of section .data:
189 ; DIS64: (idx: 9) store_intern_int_zero[DS]:
190 ; DIS64: R_POS        (idx: 3) .store_intern_int_zero
191 ; DIS64: R_POS        (idx: 15) TOC[TC0]
192 ; DIS64: (idx: 11) load_global_int_nonzero[DS]:
193 ; DIS64: R_POS        (idx: 5) .load_global_int_nonzero
194 ; DIS64: R_POS        (idx: 15) TOC[TC0]
195 ; DIS64: (idx: 13) load_intern_int_zero[DS]:
196 ; DIS64: R_POS        (idx: 7) .load_intern_int_zero
197 ; DIS64: R_POS        (idx: 15) TOC[TC0]
198 ; DIS64: (idx: 17) intern_int_zero[TC]:
199 ; DIS64: R_TLS_IE     (idx: 25) intern_int_zero[UL]
200 ; DIS64: (idx: 19) global_int_nonzero[TC]:
201 ; DIS64: R_TLS_IE     (idx: 23) global_int_nonzero
203 ; DIS64: Disassembly of section .tdata:
204 ; DIS64: (idx: 23) global_int_nonzero:
206 ; DIS64: Disassembly of section .tbss:
207 ; DIS64: (idx: 25) intern_int_zero[UL]:
209 ; REL32:      File: {{.*}}aix-tls-ie-xcoff-reloc.ll.tmp.o
210 ; REL32-NEXT: Format: aixcoff-rs6000
211 ; REL32-NEXT: Arch: powerpc
212 ; REL32-NEXT: AddressSize: 32bit
213 ; REL32-NEXT: Relocations [
214 ; REL32:       Virtual Address: 0xA
215 ; REL32-NEXT:       Symbol: intern_int_zero (19)
216 ; REL32-NEXT:       IsSigned: No
217 ; REL32-NEXT:       FixupBitValue: 0
218 ; REL32-NEXT:       Length: 16
219 ; REL32-NEXT:       Type: R_TOC (0x3)
220 ; REL32-NEXT:     }
221 ; REL32:       Virtual Address: 0x10
222 ; REL32-NEXT:       Symbol: .__get_tpointer (1)
223 ; REL32-NEXT:       IsSigned: No
224 ; REL32-NEXT:       FixupBitValue: 0
225 ; REL32-NEXT:       Length: 26
226 ; REL32-NEXT:       Type: R_RBA (0x18)
227 ; REL32-NEXT:     }
228 ; REL32:       Virtual Address: 0x3A
229 ; REL32-NEXT:       Symbol: global_int_nonzero (21)
230 ; REL32-NEXT:       IsSigned: No
231 ; REL32-NEXT:       FixupBitValue: 0
232 ; REL32-NEXT:       Length: 16
233 ; REL32-NEXT:       Type: R_TOC (0x3)
234 ; REL32-NEXT:     }
235 ; REL32:       Virtual Address: 0x40
236 ; REL32-NEXT:       Symbol: .__get_tpointer (1)
237 ; REL32-NEXT:       IsSigned: No
238 ; REL32-NEXT:       FixupBitValue: 0
239 ; REL32-NEXT:       Length: 26
240 ; REL32-NEXT:       Type: R_RBA (0x18)
241 ; REL32-NEXT:     }
242 ; REL32:       Virtual Address: 0x6A
243 ; REL32-NEXT:       Symbol: intern_int_zero (19)
244 ; REL32-NEXT:       IsSigned: No
245 ; REL32-NEXT:       FixupBitValue: 0
246 ; REL32-NEXT:       Length: 16
247 ; REL32-NEXT:       Type: R_TOC (0x3)
248 ; REL32-NEXT:     }
249 ; REL32:       Virtual Address: 0x70
250 ; REL32-NEXT:       Symbol: .__get_tpointer (1)
251 ; REL32-NEXT:       IsSigned: No
252 ; REL32-NEXT:       FixupBitValue: 0
253 ; REL32-NEXT:       Length: 26
254 ; REL32-NEXT:       Type: R_RBA (0x18)
255 ; REL32-NEXT:     }
256 ; REL32:       Virtual Address: 0xAC
257 ; REL32-NEXT:       Symbol: intern_int_zero (27)
258 ; REL32-NEXT:       IsSigned: No
259 ; REL32-NEXT:       FixupBitValue: 0
260 ; REL32-NEXT:       Length: 32
261 ; REL32-NEXT:       Type: R_TLS_IE (0x21)
262 ; REL32-NEXT:     }
263 ; REL32:       Virtual Address: 0xB0
264 ; REL32-NEXT:       Symbol: global_int_nonzero (25)
265 ; REL32-NEXT:       IsSigned: No
266 ; REL32-NEXT:       FixupBitValue: 0
267 ; REL32-NEXT:       Length: 32
268 ; REL32-NEXT:       Type: R_TLS_IE (0x21)
269 ; REL32-NEXT:     }
271 ; SYM32:      File: {{.*}}aix-tls-ie-xcoff-reloc.ll.tmp.o
272 ; SYM32-NEXT: Format: aixcoff-rs6000
273 ; SYM32-NEXT: Arch: powerpc
274 ; SYM32-NEXT: AddressSize: 32bit
275 ; SYM32-NEXT: Symbols [
276 ; SYM32:     Index: 19
277 ; SYM32-NEXT:     Name: intern_int_zero
278 ; SYM32-NEXT:     Value (RelocatableAddress): 0xAC
279 ; SYM32-NEXT:     Section: .data
280 ; SYM32-NEXT:     Type: 0x0
281 ; SYM32-NEXT:     StorageClass: C_HIDEXT (0x6B)
282 ; SYM32-NEXT:     NumberOfAuxEntries: 1
283 ; SYM32-NEXT:     CSECT Auxiliary Entry {
284 ; SYM32-NEXT:       Index: 20
285 ; SYM32-NEXT:       SectionLen: 4
286 ; SYM32-NEXT:       ParameterHashIndex: 0x0
287 ; SYM32-NEXT:       TypeChkSectNum: 0x0
288 ; SYM32-NEXT:       SymbolAlignmentLog2: 2
289 ; SYM32-NEXT:       SymbolType: XTY_SD (0x1)
290 ; SYM32-NEXT:       StorageMappingClass: XMC_TC (0x3)
291 ; SYM32-NEXT:       StabInfoIndex: 0x0
292 ; SYM32-NEXT:       StabSectNum: 0x0
293 ; SYM32-NEXT:     }
294 ; SYM32-NEXT:   }
295 ; SYM32:     Index: 21
296 ; SYM32-NEXT:     Name: global_int_nonzero
297 ; SYM32-NEXT:     Value (RelocatableAddress): 0xB0
298 ; SYM32-NEXT:     Section: .data
299 ; SYM32-NEXT:     Type: 0x0
300 ; SYM32-NEXT:     StorageClass: C_HIDEXT (0x6B)
301 ; SYM32-NEXT:     NumberOfAuxEntries: 1
302 ; SYM32-NEXT:     CSECT Auxiliary Entry {
303 ; SYM32-NEXT:       Index: 22
304 ; SYM32-NEXT:       SectionLen: 4
305 ; SYM32-NEXT:       ParameterHashIndex: 0x0
306 ; SYM32-NEXT:       TypeChkSectNum: 0x0
307 ; SYM32-NEXT:       SymbolAlignmentLog2: 2
308 ; SYM32-NEXT:       SymbolType: XTY_SD (0x1)
309 ; SYM32-NEXT:       StorageMappingClass: XMC_TC (0x3)
310 ; SYM32-NEXT:       StabInfoIndex: 0x0
311 ; SYM32-NEXT:       StabSectNum: 0x0
312 ; SYM32-NEXT:     }
313 ; SYM32-NEXT:   }
314 ; SYM32:     Index: 25
315 ; SYM32-NEXT:     Name: global_int_nonzero
316 ; SYM32-NEXT:     Value (RelocatableAddress): 0x0
317 ; SYM32-NEXT:     Section: .tdata
318 ; SYM32-NEXT:     Type: 0x0
319 ; SYM32-NEXT:     StorageClass: C_EXT (0x2)
320 ; SYM32-NEXT:     NumberOfAuxEntries: 1
321 ; SYM32-NEXT:     CSECT Auxiliary Entry {
322 ; SYM32-NEXT:       Index: 26
323 ; SYM32-NEXT:       ContainingCsectSymbolIndex: 23
324 ; SYM32-NEXT:       ParameterHashIndex: 0x0
325 ; SYM32-NEXT:       TypeChkSectNum: 0x0
326 ; SYM32-NEXT:       SymbolAlignmentLog2: 0
327 ; SYM32-NEXT:       SymbolType: XTY_LD (0x2)
328 ; SYM32-NEXT:       StorageMappingClass: XMC_TL (0x14)
329 ; SYM32-NEXT:       StabInfoIndex: 0x0
330 ; SYM32-NEXT:       StabSectNum: 0x0
331 ; SYM32-NEXT:     }
332 ; SYM32-NEXT:   }
333 ; SYM32:     Index: 27
334 ; SYM32-NEXT:     Name: intern_int_zero
335 ; SYM32-NEXT:     Value (RelocatableAddress): 0x4
336 ; SYM32-NEXT:     Section: .tbss
337 ; SYM32-NEXT:     Type: 0x0
338 ; SYM32-NEXT:     StorageClass: C_HIDEXT (0x6B)
339 ; SYM32-NEXT:     NumberOfAuxEntries: 1
340 ; SYM32-NEXT:     CSECT Auxiliary Entry {
341 ; SYM32-NEXT:       Index: 28
342 ; SYM32-NEXT:       SectionLen: 4
343 ; SYM32-NEXT:       ParameterHashIndex: 0x0
344 ; SYM32-NEXT:       TypeChkSectNum: 0x0
345 ; SYM32-NEXT:       SymbolAlignmentLog2: 2
346 ; SYM32-NEXT:       SymbolType: XTY_CM (0x3)
347 ; SYM32-NEXT:       StorageMappingClass: XMC_UL (0x15)
348 ; SYM32-NEXT:       StabInfoIndex: 0x0
349 ; SYM32-NEXT:       StabSectNum: 0x0
350 ; SYM32-NEXT:     }
351 ; SYM32-NEXT:   }
353 ; DIS32: {{.*}}aix-tls-ie-xcoff-reloc.ll.tmp.o: file format aixcoff-rs6000
354 ; DIS32: Disassembly of section .text:
355 ; DIS32: (idx: 5) .store_intern_int_zero:
356 ; DIS32: R_TOC        (idx: 19) intern_int_zero[TC]
357 ; DIS32: R_RBA        (idx: 1) .__get_tpointer[PR]
358 ; DIS32: blr
359 ; DIS32: (idx: 7) .load_global_int_nonzero:
360 ; DIS32: R_TOC        (idx: 21) global_int_nonzero[TC]
361 ; DIS32: R_RBA        (idx: 1) .__get_tpointer[PR]
362 ; DIS32: blr
363 ; DIS32: (idx: 9) .load_intern_int_zero:
364 ; DIS32: R_TOC        (idx: 19) intern_int_zero[TC]
365 ; DIS32: R_RBA        (idx: 1) .__get_tpointer[PR]
366 ; DIS32: blr
368 ; DIS32: Disassembly of section .data:
369 ; DIS32: (idx: 11) store_intern_int_zero[DS]:
370 ; DIS32: R_POS        (idx: 5) .store_intern_int_zero
371 ; DIS32: R_POS        (idx: 17) TOC[TC0]
372 ; DIS32: (idx: 13) load_global_int_nonzero[DS]:
373 ; DIS32: R_POS        (idx: 7) .load_global_int_nonzero
374 ; DIS32: R_POS        (idx: 17) TOC[TC0]
375 ; DIS32: (idx: 15) load_intern_int_zero[DS]:
376 ; DIS32: R_POS        (idx: 9) .load_intern_int_zero
377 ; DIS32: R_POS        (idx: 17) TOC[TC0]
378 ; DIS32: (idx: 19) intern_int_zero[TC]:
379 ; DIS32: R_TLS_IE     (idx: 27) intern_int_zero[UL]
380 ; DIS32: (idx: 21) global_int_nonzero[TC]:
381 ; DIS32: R_TLS_IE     (idx: 25) global_int_nonzero
383 ; DIS32: Disassembly of section .tdata:
384 ; DIS32: (idx: 25) global_int_nonzero:
386 ; DIS32: Disassembly of section .tbss:
387 ; DIS32: (idx: 27) intern_int_zero[UL]: