xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-small-local-dynamic-tls-largeaccess.ll (revision 19220110acf5ed5cf8be035b7e4a7aed69f0adb1)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
3; RUN:      -mattr=+aix-small-local-dynamic-tls -mtriple powerpc64-ibm-aix-xcoff < %s \
4; RUN:      | FileCheck %s --check-prefix=SMALL-LOCAL-DYNAMIC-SMALLCM64
5; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
6; RUN:      -mattr=+aix-small-local-dynamic-tls -mtriple powerpc64-ibm-aix-xcoff --code-model=large \
7; RUN:      < %s | FileCheck %s \
8; RUN:      --check-prefix=SMALL-LOCAL-DYNAMIC-LARGECM64
9
10; Test disassembly of object.
11; RUN: llc -verify-machineinstrs -mcpu=pwr7 \
12; RUN:      -mtriple powerpc64-ibm-aix-xcoff -xcoff-traceback-table=false \
13; RUN:      --code-model=large -filetype=obj -o %t.o < %s
14; RUN: llvm-objdump -D -r --symbol-description %t.o | FileCheck -D#NFA=2 --check-prefix=DIS %s
15
16@ElementIntTLSv1 = thread_local(localdynamic) global [8187 x i32] zeroinitializer, align 4  ; Within 32K
17@ElementIntTLS2 = thread_local(localdynamic) global [4000 x i32] zeroinitializer, align 4
18@ElementIntTLS3 = thread_local(localdynamic) global [4000 x i32] zeroinitializer, align 4
19@ElementIntTLS4 = thread_local(localdynamic) global [4000 x i32] zeroinitializer, align 4
20@ElementIntTLS5 = thread_local(localdynamic) global [4000 x i32] zeroinitializer, align 4
21@ElementIntTLSv2 = thread_local(localdynamic) global [9000 x i32] zeroinitializer, align 4  ; Beyond 32K
22
23@ElementLongTLS6 = external thread_local(localdynamic) global [60 x i64], align 8
24@ElementLongTLS2 = thread_local(localdynamic) global [3000 x i64] zeroinitializer, align 8  ; Within 32K
25@MyTLSGDVar = thread_local global [800 x i64] zeroinitializer, align 8
26@ElementLongTLS3 = thread_local(localdynamic) global [3000 x i64] zeroinitializer, align 8
27@ElementLongTLS4 = thread_local(localdynamic) global [3000 x i64] zeroinitializer, align 8
28@ElementLongTLS5 = thread_local(localdynamic) global [3000 x i64] zeroinitializer, align 8
29@ElementLongTLS = thread_local(localdynamic) local_unnamed_addr global [7800 x i64] zeroinitializer, align 8  ; Beyond 32K
30
31declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1
32
33; All accesses use a "faster" local-dynamic sequence directly off the module handle.
34; Exercise PPCXCOFFObjectWriter::getRelocTypeAndSignSize/fixup_ppc_half16.
35define signext i32 @test1() {
36; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: test1:
37; SMALL-LOCAL-DYNAMIC-SMALLCM64:       # %bb.0: # %entry
38; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mflr r0
39; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stdu r1, -48(r1)
40; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML"
41; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r0, 64(r1)
42; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    bla .__tls_get_mod[PR]
43; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 1
44; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r5, 4
45; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r4, ElementIntTLSv1[TL]@ld(r3)
46; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 2
47; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r5, ElementIntTLSv1[TL]@ld+24(r3)
48; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r5, (ElementIntTLS4[TL]@ld+328)-65536(r3)
49; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r4, (ElementIntTLS2[TL]@ld+320)-65536(r3)
50; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 3
51; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r4, (ElementIntTLS3[TL]@ld+324)-65536(r3)
52; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 88
53; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r4, (ElementIntTLS5[TL]@ld+332)-65536(r3)
54; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r3, 102
55; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    addi r1, r1, 48
56; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r0, 16(r1)
57; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mtlr r0
58; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    blr
59;
60; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: test1:
61; SMALL-LOCAL-DYNAMIC-LARGECM64:       # %bb.0: # %entry
62; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mflr r0
63; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stdu r1, -48(r1)
64; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addis r3, L..C0@u(r2)
65; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r0, 64(r1)
66; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r3, L..C0@l(r3)
67; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    bla .__tls_get_mod[PR]
68; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 1
69; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r5, 4
70; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r4, ElementIntTLSv1[TL]@ld(r3)
71; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 2
72; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, ElementIntTLSv1[TL]@ld+24(r3)
73; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, (ElementIntTLS4[TL]@ld+328)-65536(r3)
74; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r4, (ElementIntTLS2[TL]@ld+320)-65536(r3)
75; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 3
76; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r4, (ElementIntTLS3[TL]@ld+324)-65536(r3)
77; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 88
78; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r4, (ElementIntTLS5[TL]@ld+332)-65536(r3)
79; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 102
80; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addi r1, r1, 48
81; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r0, 16(r1)
82; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mtlr r0
83; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    blr
84entry:
85  %tls1 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLSv1)
86  store i32 1, ptr %tls1, align 4
87  %arrayidx1 = getelementptr inbounds [8187 x i32], ptr %tls1, i64 0, i64 6
88  store i32 4, ptr %arrayidx1, align 4
89  %tls2 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS2)
90  %arrayidx2 = getelementptr inbounds [4000 x i32], ptr %tls2, i64 0, i64 80
91  store i32 2, ptr %arrayidx2, align 4
92  %tls3 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS3)
93  %arrayidx3 = getelementptr inbounds [4000 x i32], ptr %tls3, i64 0, i64 81
94  store i32 3, ptr %arrayidx3, align 4
95  %tls4 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS4)
96  %arrayidx4 = getelementptr inbounds [4000 x i32], ptr %tls4, i64 0, i64 82
97  store i32 4, ptr %arrayidx4, align 4
98  %tls5 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS5)
99  %arrayidx5 = getelementptr inbounds [4000 x i32], ptr %tls5, i64 0, i64 83
100  store i32 88, ptr %arrayidx5, align 4
101  %load1 = load i32, ptr %tls1, align 4
102  %load2 = load i32, ptr %arrayidx1, align 4
103  %load3 = load i32, ptr %arrayidx2, align 4
104  %load4 = load i32, ptr %arrayidx3, align 4
105  %load5 = load i32, ptr %arrayidx4, align 4
106  %add = add i32 %load1, 88
107  %add6 = add i32 %add, %load2
108  %add8 = add i32 %add6, %load3
109  %add10 = add i32 %add8, %load4
110  %add12 = add i32 %add10, %load5
111  ret i32 %add12
112}
113
114; All accesses use a "faster" local-dynamic sequence directly off the module handle.
115; Exercise PPCXCOFFObjectWriter::getRelocTypeAndSignSize/fixup_ppc_half16ds.
116define i64 @test2() {
117; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: test2:
118; SMALL-LOCAL-DYNAMIC-SMALLCM64:       # %bb.0: # %entry
119; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mflr r0
120; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stdu r1, -48(r1)
121; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML"
122; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r0, 64(r1)
123; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    bla .__tls_get_mod[PR]
124; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mr r6, r3
125; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r3, 212
126; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 203
127; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r4, (ElementLongTLS2[TL]@ld+1200)-131072(r6)
128; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r4, L..C1(r2) # target-flags(ppc-tlsgd) @MyTLSGDVar
129; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r3, ElementLongTLS6[UL]@ld+424(r6)
130; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tlsgdm) @MyTLSGDVar
131; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    bla .__tls_get_addr[PR]
132; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 44
133; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r4, 440(r3)
134; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r3, 6
135; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 100
136; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r3, (ElementLongTLS3[TL]@ld+2000)-196608(r6)
137; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r3, 882
138; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r4, (ElementLongTLS4[TL]@ld+6800)-196608(r6)
139; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r3, (ElementLongTLS5[TL]@ld+8400)-196608(r6)
140; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r3, 1191
141; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    addi r1, r1, 48
142; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r0, 16(r1)
143; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mtlr r0
144; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    blr
145;
146; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: test2:
147; SMALL-LOCAL-DYNAMIC-LARGECM64:       # %bb.0: # %entry
148; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mflr r0
149; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stdu r1, -48(r1)
150; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addis r3, L..C0@u(r2)
151; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r0, 64(r1)
152; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r3, L..C0@l(r3)
153; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    bla .__tls_get_mod[PR]
154; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addis r4, L..C1@u(r2)
155; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mr r6, r3
156; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 212
157; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r4, L..C1@l(r4)
158; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r3, ElementLongTLS6[UL]@ld+424(r6)
159; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 203
160; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r3, (ElementLongTLS2[TL]@ld+1200)-131072(r6)
161; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addis r3, L..C2@u(r2)
162; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r3, L..C2@l(r3)
163; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    bla .__tls_get_addr[PR]
164; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 44
165; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r4, 440(r3)
166; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 6
167; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 100
168; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r3, (ElementLongTLS3[TL]@ld+2000)-196608(r6)
169; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 882
170; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r4, (ElementLongTLS4[TL]@ld+6800)-196608(r6)
171; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r3, (ElementLongTLS5[TL]@ld+8400)-196608(r6)
172; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 1191
173; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addi r1, r1, 48
174; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r0, 16(r1)
175; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mtlr r0
176; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    blr
177entry:
178  %tls1 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ElementLongTLS6)
179  %arrayidx = getelementptr inbounds [60 x i64], ptr %tls1, i64 0, i64 53
180  store i64 212, ptr %arrayidx, align 8
181  %tls2 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ElementLongTLS2)
182  %arrayidx1 = getelementptr inbounds [3000 x i64], ptr %tls2, i64 0, i64 150
183  store i64 203, ptr %arrayidx1, align 8
184  %tls3 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @MyTLSGDVar)
185  %arrayidx2 = getelementptr inbounds [800 x i64], ptr %tls3, i64 0, i64 55
186  store i64 44, ptr %arrayidx2, align 8
187  %tls4 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ElementLongTLS3)
188  %arrayidx3 = getelementptr inbounds [3000 x i64], ptr %tls4, i64 0, i64 250
189  store i64 6, ptr %arrayidx3, align 8
190  %tls5 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ElementLongTLS4)
191  %arrayidx4 = getelementptr inbounds [3000 x i64], ptr %tls5, i64 0, i64 850
192  store i64 100, ptr %arrayidx4, align 8
193  %tls6 = tail call align 8 ptr @llvm.threadlocal.address.p0(ptr align 8 @ElementLongTLS5)
194  %arrayidx5 = getelementptr inbounds [3000 x i64], ptr %tls6, i64 0, i64 1050
195  store i64 882, ptr %arrayidx5, align 8
196  %load1 = load i64, ptr %arrayidx1, align 8
197  %load2 = load i64, ptr %arrayidx3, align 8
198  %load3 = load i64, ptr %arrayidx4, align 8
199  %add = add i64 %load1, 882
200  %add9 = add i64 %add, %load2
201  %add11 = add i64 %add9, %load3
202  ret i64 %add11
203}
204
205; Example of one access using the regular local-dynamic access from the TOC.
206define signext i32 @test3() {
207; SMALL-LOCAL-DYNAMIC-SMALLCM64-LABEL: test3:
208; SMALL-LOCAL-DYNAMIC-SMALLCM64:       # %bb.0: # %entry
209; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mflr r0
210; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stdu r1, -48(r1)
211; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tlsldm) @"_$TLSML"
212; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    std r0, 64(r1)
213; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r6, 3
214; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    bla .__tls_get_mod[PR]
215; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r5, 2
216; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r4, 1
217; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r6, (ElementIntTLS3[TL]@ld+324)-65536(r3)
218; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r6, L..C3(r2) # target-flags(ppc-tlsld) @ElementIntTLSv2
219; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r5, (ElementIntTLS2[TL]@ld+320)-65536(r3)
220; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r5, 88
221; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r5, (ElementIntTLS5[TL]@ld+332)-65536(r3)
222; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r5, 4
223; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r5, (ElementIntTLS4[TL]@ld+328)-65536(r3)
224; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stwux r4, r3, r6
225; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    stw r5, 24(r3)
226; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    li r3, 102
227; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    addi r1, r1, 48
228; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    ld r0, 16(r1)
229; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    mtlr r0
230; SMALL-LOCAL-DYNAMIC-SMALLCM64-NEXT:    blr
231;
232; SMALL-LOCAL-DYNAMIC-LARGECM64-LABEL: test3:
233; SMALL-LOCAL-DYNAMIC-LARGECM64:       # %bb.0: # %entry
234; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mflr r0
235; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stdu r1, -48(r1)
236; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addis r3, L..C0@u(r2)
237; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    std r0, 64(r1)
238; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addis r6, L..C3@u(r2)
239; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r3, L..C0@l(r3)
240; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r6, L..C3@l(r6)
241; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    bla .__tls_get_mod[PR]
242; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r5, 2
243; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r4, 1
244; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, (ElementIntTLS2[TL]@ld+320)-65536(r3)
245; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r5, 3
246; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, (ElementIntTLS3[TL]@ld+324)-65536(r3)
247; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r5, 88
248; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, (ElementIntTLS5[TL]@ld+332)-65536(r3)
249; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r5, 4
250; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, (ElementIntTLS4[TL]@ld+328)-65536(r3)
251; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stwux r4, r3, r6
252; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    stw r5, 24(r3)
253; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    li r3, 102
254; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    addi r1, r1, 48
255; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    ld r0, 16(r1)
256; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    mtlr r0
257; SMALL-LOCAL-DYNAMIC-LARGECM64-NEXT:    blr
258entry:
259  %tls1 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLSv2)
260  store i32 1, ptr %tls1, align 4
261  %arrayidx1 = getelementptr inbounds [9000 x i32], ptr %tls1, i64 0, i64 6
262  store i32 4, ptr %arrayidx1, align 4
263  %tls2 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS2)
264  %arrayidx2 = getelementptr inbounds [4000 x i32], ptr %tls2, i64 0, i64 80
265  store i32 2, ptr %arrayidx2, align 4
266  %tls3 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS3)
267  %arrayidx3 = getelementptr inbounds [4000 x i32], ptr %tls3, i64 0, i64 81
268  store i32 3, ptr %arrayidx3, align 4
269  %tls4 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS4)
270  %arrayidx4 = getelementptr inbounds [4000 x i32], ptr %tls4, i64 0, i64 82
271  store i32 4, ptr %arrayidx4, align 4
272  %tls5 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ElementIntTLS5)
273  %arrayidx5 = getelementptr inbounds [4000 x i32], ptr %tls5, i64 0, i64 83
274  store i32 88, ptr %arrayidx5, align 4
275  %load1 = load i32, ptr %tls1, align 4
276  %load2 = load i32, ptr %arrayidx1, align 4
277  %load3 = load i32, ptr %arrayidx2, align 4
278  %load4 = load i32, ptr %arrayidx3, align 4
279  %load5 = load i32, ptr %arrayidx4, align 4
280  %add = add i32 %load1, 88
281  %add9 = add i32 %add, %load2
282  %add11 = add i32 %add9, %load3
283  %add13 = add i32 %add11, %load4
284  %add15 = add i32 %add13, %load5
285  ret i32 %add15
286}
287
288; DIS:      file format aix5coff64-rs6000
289; DIS:      Disassembly of section .text:
290; DIS:      0000000000000000 (idx: [[#NFA+9]]) .test1:
291; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mflr 0
292; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stdu 1, -48(1)
293; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
294; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+23]]) _$TLSML[TC]
295; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 6, 2, 0
296; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+25]]) ElementIntTLSv1[TE]
297; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 0, 64(1)
298; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 7, 2, 0
299; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+27]]) ElementIntTLS3[TE]
300; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 0(3)
301; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+23]]) _$TLSML[TC]
302; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 8, 2, 0
303; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+29]]) ElementIntTLS4[TE]
304; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 9, 2, 0
305; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+31]]) ElementIntTLS5[TE]
306; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 7, 16(7)
307; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+27]]) ElementIntTLS3[TE]
308; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 8, 24(8)
309; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+29]]) ElementIntTLS4[TE]
310; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 9, 32(9)
311; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+31]]) ElementIntTLS5[TE]
312; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                bla 0x0
313; DIS-NEXT: {{0*}}[[#ADDR]]: R_RBA	(idx: [[#NFA+1]]) .__tls_get_mod[PR]
314; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 5, 8(6)
315; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+25]]) ElementIntTLSv1[TE]
316; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 6, 2, 0
317; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+33]]) ElementIntTLS2[TE]
318; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 1
319; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 6, 40(6)
320; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+33]]) ElementIntTLS2[TE]
321; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 7, 3, 7
322; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 8, 3, 8
323; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 9, 3, 9
324; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 6, 3, 6
325; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stwux 4, 3, 5
326; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 2
327; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 320(6)
328; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 3
329; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 324(7)
330; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 4
331; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 24(3)
332; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 88
333; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 328(8)
334; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, 332(9)
335; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 102
336; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addi 1, 1, 48
337; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 0, 16(1)
338; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mtlr 0
339; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                blr
340
341; DIS:      0000000000000090 (idx: [[#NFA+11]]) .test2:
342; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mflr 0
343; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stdu 1, -48(1)
344; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
345; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+23]]) _$TLSML[TC]
346; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 0, 64(1)
347; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 7, 2, 0
348; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+35]]) ElementLongTLS6[TE]
349; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 0(3)
350; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+23]]) _$TLSML[TC]
351; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                bla 0x0
352; DIS-NEXT: {{0*}}[[#ADDR]]: R_RBA	(idx: [[#NFA+1]]) .__tls_get_mod[PR]
353; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 212
354; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mr	6, 3
355; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 48(7)
356; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+35]]) ElementLongTLS6[TE]
357; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 3, 6, 3
358; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 424(3)
359; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
360; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+37]]) ElementLongTLS2[TE]
361; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 203
362; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 56(3)
363; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+37]]) ElementLongTLS2[TE]
364; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 3, 6, 3
365; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 1200(3)
366; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
367; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+39]]) .MyTLSGDVar[TE]
368; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 4, 2, 0
369; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+41]]) MyTLSGDVar[TE]
370; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 64(3)
371; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+39]]) .MyTLSGDVar[TE]
372; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 4, 72(4)
373; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+41]]) MyTLSGDVar[TE]
374; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                bla 0x0
375; DIS-NEXT: {{0*}}[[#ADDR]]: R_RBA	(idx: [[#NFA+3]]) .__tls_get_addr[PR]
376; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 44
377; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 440(3)
378; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
379; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+43]]) ElementLongTLS3[TE]
380; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 6
381; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 80(3)
382; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+43]]) ElementLongTLS3[TE]
383; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 3, 6, 3
384; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 2000(3)
385; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
386; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+45]]) ElementLongTLS4[TE]
387; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 100
388; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 88(3)
389; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+45]]) ElementLongTLS4[TE]
390; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 3, 6, 3
391; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 6800(3)
392; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
393; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+47]]) ElementLongTLS5[TE]
394; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 882
395; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 96(3)
396; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+47]]) ElementLongTLS5[TE]
397; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 3, 6, 3
398; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 4, 8400(3)
399; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 1191
400; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addi 1, 1, 48
401; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 0, 16(1)
402; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mtlr 0
403; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                blr
404
405; DIS:      0000000000000140 (idx: [[#NFA+13]]) .test3:
406; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mflr 0
407; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stdu 1, -48(1)
408; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 3, 2, 0
409; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+23]]) _$TLSML[TC]
410; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 6, 2, 0
411; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+49]]) ElementIntTLSv2[TE]
412; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                std 0, 64(1)
413; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 7, 2, 0
414; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+27]]) ElementIntTLS3[TE]
415; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 3, 0(3)
416; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+23]]) _$TLSML[TC]
417; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 8, 2, 0
418; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+29]]) ElementIntTLS4[TE]
419; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 9, 2, 0
420; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+31]]) ElementIntTLS5[TE]
421; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 7, 16(7)
422; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+27]]) ElementIntTLS3[TE]
423; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 8, 24(8)
424; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+29]]) ElementIntTLS4[TE]
425; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 9, 32(9)
426; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+31]]) ElementIntTLS5[TE]
427; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                bla 0x0
428; DIS-NEXT: {{0*}}[[#ADDR]]: R_RBA	(idx: [[#NFA+1]]) .__tls_get_mod[PR]
429; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 5, 104(6)
430; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+49]]) ElementIntTLSv2[TE]
431; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addis 6, 2, 0
432; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCU	(idx: [[#NFA+33]]) ElementIntTLS2[TE]
433; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 1
434; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 6, 40(6)
435; DIS-NEXT: {{0*}}[[#ADDR + 2]]: R_TOCL	(idx: [[#NFA+33]]) ElementIntTLS2[TE]
436; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 7, 3, 7
437; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 8, 3, 8
438; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 9, 3, 9
439; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                add 6, 3, 6
440; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stwux 4, 3, 5
441; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 2
442; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 320(6)
443; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 3
444; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 324(7)
445; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 4, 4
446; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 24(3)
447; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 88
448; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 4, 328(8)
449; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                stw 3, 332(9)
450; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                li 3, 102
451; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                addi 1, 1, 48
452; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                ld 0, 16(1)
453; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                mtlr 0
454; DIS-NEXT: [[#%x, ADDR:]]: {{.*}}                blr
455
456; DIS:      Disassembly of section .data:
457
458; DIS:      00000000000001d0 (idx: 17) test1[DS]:
459; DIS-NEXT:      1d0: 00 00 00 00
460; DIS-NEXT: 00000000000001d0:  R_POS	(idx: [[#NFA+9]]) .test1
461; DIS-NEXT:      1d4: 00 00 00 00
462; DIS-NEXT:      1d8: 00 00 00 00
463; DIS-NEXT: 00000000000001d8:  R_POS	(idx: [[#NFA+21]]) TOC[TC0]
464; DIS-NEXT:      1dc: 00 00 02 18
465
466; DIS:      00000000000001e8 (idx: 19) test2[DS]:
467; DIS-NEXT:      1e8: 00 00 00 00
468; DIS-NEXT: 00000000000001e8:  R_POS	(idx: [[#NFA+11]]) .test2
469; DIS-NEXT:      1ec: 00 00 00 90
470; DIS-NEXT:      1f0: 00 00 00 00
471; DIS-NEXT: 00000000000001f0:  R_POS	(idx: [[#NFA+21]]) TOC[TC0]
472; DIS-NEXT:      1f4: 00 00 02 18
473
474; DIS:      0000000000000200 (idx: 21) test3[DS]:
475; DIS-NEXT:      200: 00 00 00 00
476; DIS-NEXT: 0000000000000200:  R_POS	(idx: [[#NFA+13]]) .test3
477; DIS-NEXT:      204: 00 00 01 40
478; DIS-NEXT:      208: 00 00 00 00
479; DIS-NEXT: 0000000000000208:  R_POS	(idx: [[#NFA+21]]) TOC[TC0]
480; DIS-NEXT:      20c: 00 00 02 18
481
482; DIS:      0000000000000218 (idx: 25) _$TLSML[TC]:
483; DIS-NEXT:      218: 00 00 00 00
484; DIS-NEXT: 0000000000000218:  R_TLSML	(idx: [[#NFA+23]]) _$TLSML[TC]
485; DIS-NEXT:      21c: 00 00 00 00
486
487; DIS:      0000000000000220 (idx: 27) ElementIntTLSv1[TE]:
488; DIS-NEXT:      220: 00 00 00 00
489; DIS-NEXT: 0000000000000220:  R_TLS_LD	(idx: [[#NFA+51]]) ElementIntTLSv1[TL]
490; DIS-NEXT:      224: 00 00 00 00
491
492; DIS:      0000000000000228 (idx: 29) ElementIntTLS3[TE]:
493; DIS-NEXT:      228: 00 00 00 00
494; DIS-NEXT: 0000000000000228:  R_TLS_LD	(idx: [[#NFA+55]]) ElementIntTLS3[TL]
495; DIS-NEXT:      22c: 00 00 be 6c
496
497; DIS:      0000000000000230 (idx: 31) ElementIntTLS4[TE]:
498; DIS-NEXT:      230: 00 00 00 00
499; DIS-NEXT: 0000000000000230:  R_TLS_LD	(idx: [[#NFA+57]]) ElementIntTLS4[TL]
500; DIS-NEXT:      234: 00 00 fc ec
501
502; DIS:      0000000000000238 (idx: 33) ElementIntTLS5[TE]:
503; DIS-NEXT:      238: 00 00 00 00
504; DIS-NEXT: 0000000000000238:  R_TLS_LD	(idx: [[#NFA+59]]) ElementIntTLS5[TL]
505; DIS-NEXT:      23c: 00 01 3b 6c
506
507; DIS:      0000000000000240 (idx: 35) ElementIntTLS2[TE]:
508; DIS-NEXT:      240: 00 00 00 00
509; DIS-NEXT: 0000000000000240:  R_TLS_LD	(idx: [[#NFA+53]]) ElementIntTLS2[TL]
510; DIS-NEXT:      244: 00 00 7f ec
511
512; DIS:      0000000000000248 (idx: 37) ElementLongTLS6[TE]:
513; DIS-NEXT:      248: 00 00 00 00
514; DIS-NEXT: 0000000000000248:  R_TLS_LD	(idx: [[#NFA+5]]) ElementLongTLS6[UL]
515; DIS-NEXT:      24c: 00 00 00 00
516
517; DIS:      0000000000000250 (idx: 39) ElementLongTLS2[TE]:
518; DIS-NEXT:      250: 00 00 00 00
519; DIS-NEXT: 0000000000000250:  R_TLS_LD	(idx: [[#NFA+63]]) ElementLongTLS2[TL]
520; DIS-NEXT:      254: 00 02 06 90
521
522; DIS:      0000000000000258 (idx: 41) .MyTLSGDVar[TE]:
523; DIS-NEXT:      258: 00 00 00 00
524; DIS-NEXT: 0000000000000258:  R_TLSM	(idx: [[#NFA+65]]) MyTLSGDVar[TL]
525; DIS-NEXT:      25c: 00 00 00 00
526
527; DIS:      0000000000000260 (idx: 43) MyTLSGDVar[TE]:
528; DIS-NEXT:      260: 00 00 00 00
529; DIS-NEXT: 0000000000000260:  R_TLS	(idx: [[#NFA+65]]) MyTLSGDVar[TL]
530; DIS-NEXT:      264: 00 02 64 50
531
532; DIS:      0000000000000268 (idx: 45) ElementLongTLS3[TE]:
533; DIS-NEXT:      268: 00 00 00 00
534; DIS-NEXT: 0000000000000268:  R_TLS_LD	(idx: [[#NFA+67]]) ElementLongTLS3[TL]
535; DIS-NEXT:      26c: 00 02 7d 50
536
537; DIS:      0000000000000270 (idx: 47) ElementLongTLS4[TE]:
538; DIS-NEXT:      270: 00 00 00 00
539; DIS-NEXT: 0000000000000270:  R_TLS_LD	(idx: [[#NFA+69]]) ElementLongTLS4[TL]
540; DIS-NEXT:      274: 00 02 db 10
541
542; DIS:      0000000000000278 (idx: 49) ElementLongTLS5[TE]:
543; DIS-NEXT:      278: 00 00 00 00
544; DIS-NEXT: 0000000000000278:  R_TLS_LD	(idx: [[#NFA+71]]) ElementLongTLS5[TL]
545; DIS-NEXT:      27c: 00 03 38 d0
546
547; DIS:      0000000000000280 (idx: 51) ElementIntTLSv2[TE]:
548; DIS-NEXT:      280: 00 00 00 00
549; DIS-NEXT: 0000000000000280:  R_TLS_LD	(idx: [[#NFA+61]]) ElementIntTLSv2[TL]
550; DIS-NEXT:      284: 00 01 79 ec
551
552; DIS:      Disassembly of section .tdata:
553; DIS:      0000000000000000 (idx: [[#NFA+51]]) ElementIntTLSv1[TL]:
554; DIS:      0000000000007fec (idx: [[#NFA+53]]) ElementIntTLS2[TL]:
555; DIS:      000000000000be6c (idx: [[#NFA+55]]) ElementIntTLS3[TL]:
556; DIS:      000000000000fcec (idx: [[#NFA+57]]) ElementIntTLS4[TL]:
557; DIS:      0000000000013b6c (idx: [[#NFA+59]]) ElementIntTLS5[TL]:
558; DIS:      00000000000179ec (idx: [[#NFA+61]]) ElementIntTLSv2[TL]:
559; DIS:      0000000000020690 (idx: [[#NFA+63]]) ElementLongTLS2[TL]:
560; DIS:      0000000000026450 (idx: [[#NFA+65]]) MyTLSGDVar[TL]:
561; DIS:      0000000000027d50 (idx: [[#NFA+67]]) ElementLongTLS3[TL]:
562; DIS:      000000000002db10 (idx: [[#NFA+69]]) ElementLongTLS4[TL]:
563; DIS:      00000000000338d0 (idx: [[#NFA+71]]) ElementLongTLS5[TL]:
564; DIS:      0000000000039690 (idx: [[#NFA+73]]) ElementLongTLS[TL]:
565