xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-tls-le-ldst-float.ll (revision 69b056d5638bbe3c8098b5d3a4980eb9929b9bbe)
1d5659808SAmy Kwan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2d5659808SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
3d5659808SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s \
4d5659808SAmy Kwan; RUN:      --check-prefix=SMALL64
5d5659808SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
6d5659808SAmy Kwan; RUN:      -mtriple powerpc64-ibm-aix-xcoff --code-model=large < %s \
7d5659808SAmy Kwan; RUN:      | FileCheck %s --check-prefix=LARGE64
8f5ae0750SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
9f5ae0750SAmy Kwan; RUN:      -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s \
10f5ae0750SAmy Kwan; RUN:      --check-prefix=SMALL32
11f5ae0750SAmy Kwan; RUN: llc  -verify-machineinstrs -mcpu=pwr7 -ppc-asm-full-reg-names \
12f5ae0750SAmy Kwan; RUN:      -mtriple powerpc-ibm-aix-xcoff --code-model=large < %s \
13f5ae0750SAmy Kwan; RUN:      | FileCheck %s --check-prefix=LARGE32
14d5659808SAmy Kwan
15d5659808SAmy Kwan@ThreadLocalVarInit = thread_local(localexec) global float 0x401D333340000000, align 4
16d5659808SAmy Kwan@VarInit = global float 0x4021666660000000, align 4
17d5659808SAmy Kwan@IThreadLocalVarUninit = internal thread_local(localexec) global float 0.000000e+00, align 4
18d5659808SAmy Kwan@IThreadLocalVarInit = internal thread_local(localexec) global float 0x4018CCCCC0000000, align 4
19d5659808SAmy Kwan@ThreadLocalVarUninit = thread_local(localexec) global float 0.000000e+00, align 4
20d5659808SAmy Kwandeclare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #1
21d5659808SAmy Kwan
22d5659808SAmy Kwandefine void @storeITLUninit(float noundef %x) {
23d5659808SAmy Kwan; SMALL64-LABEL: storeITLUninit:
24d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
25d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit
26598ccceaSAmy Kwan; SMALL64-NEXT:    stfsx f1, r13, r3
27d5659808SAmy Kwan; SMALL64-NEXT:    blr
28d5659808SAmy Kwan;
29d5659808SAmy Kwan; LARGE64-LABEL: storeITLUninit:
30d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
31d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C0@u(r2)
32d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C0@l(r3)
33598ccceaSAmy Kwan; LARGE64-NEXT:    stfsx f1, r13, r3
34d5659808SAmy Kwan; LARGE64-NEXT:    blr
35f5ae0750SAmy Kwan;
36f5ae0750SAmy Kwan; SMALL32-LABEL: storeITLUninit:
37f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
38f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
39f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
40f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit
41f5ae0750SAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
42f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
43598ccceaSAmy Kwan; SMALL32-NEXT:    stfsx f1, r3, r4
44f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
45f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
46f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
47f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
48f5ae0750SAmy Kwan;
49f5ae0750SAmy Kwan; LARGE32-LABEL: storeITLUninit:
50f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
51f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
52f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
53f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
54f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C0@u(r2)
55f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C0@l(r3)
56f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
57598ccceaSAmy Kwan; LARGE32-NEXT:    stfsx f1, r3, r4
58f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
59f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
60f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
61f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
62d5659808SAmy Kwanentry:
63d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)
64d5659808SAmy Kwan  store float %x, ptr %0, align 4
65d5659808SAmy Kwan  ret void
66d5659808SAmy Kwan}
67d5659808SAmy Kwan
68d5659808SAmy Kwandefine void @storeITLInit(float noundef %x) {
69d5659808SAmy Kwan; SMALL64-LABEL: storeITLInit:
70d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
71d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit
72598ccceaSAmy Kwan; SMALL64-NEXT:    stfsx f1, r13, r3
73d5659808SAmy Kwan; SMALL64-NEXT:    blr
74d5659808SAmy Kwan;
75d5659808SAmy Kwan; LARGE64-LABEL: storeITLInit:
76d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
77d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C1@u(r2)
78d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C1@l(r3)
79598ccceaSAmy Kwan; LARGE64-NEXT:    stfsx f1, r13, r3
80d5659808SAmy Kwan; LARGE64-NEXT:    blr
81f5ae0750SAmy Kwan;
82f5ae0750SAmy Kwan; SMALL32-LABEL: storeITLInit:
83f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
84f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
85f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
86f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit
87f5ae0750SAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
88f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
89598ccceaSAmy Kwan; SMALL32-NEXT:    stfsx f1, r3, r4
90f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
91f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
92f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
93f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
94f5ae0750SAmy Kwan;
95f5ae0750SAmy Kwan; LARGE32-LABEL: storeITLInit:
96f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
97f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
98f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
99f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
100f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C1@u(r2)
101f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C1@l(r3)
102f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
103598ccceaSAmy Kwan; LARGE32-NEXT:    stfsx f1, r3, r4
104f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
105f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
106f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
107f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
108d5659808SAmy Kwanentry:
109d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
110d5659808SAmy Kwan  store float %x, ptr %0, align 4
111d5659808SAmy Kwan  ret void
112d5659808SAmy Kwan}
113d5659808SAmy Kwan
114d5659808SAmy Kwandefine void @storeTLUninit(float noundef %x) {
115d5659808SAmy Kwan; SMALL64-LABEL: storeTLUninit:
116d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
117d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit
118598ccceaSAmy Kwan; SMALL64-NEXT:    stfsx f1, r13, r3
119d5659808SAmy Kwan; SMALL64-NEXT:    blr
120d5659808SAmy Kwan;
121d5659808SAmy Kwan; LARGE64-LABEL: storeTLUninit:
122d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
123d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C2@u(r2)
124d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C2@l(r3)
125598ccceaSAmy Kwan; LARGE64-NEXT:    stfsx f1, r13, r3
126d5659808SAmy Kwan; LARGE64-NEXT:    blr
127f5ae0750SAmy Kwan;
128f5ae0750SAmy Kwan; SMALL32-LABEL: storeTLUninit:
129f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
130f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
131f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
132f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit
133f5ae0750SAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
134f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
135598ccceaSAmy Kwan; SMALL32-NEXT:    stfsx f1, r3, r4
136f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
137f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
138f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
139f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
140f5ae0750SAmy Kwan;
141f5ae0750SAmy Kwan; LARGE32-LABEL: storeTLUninit:
142f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
143f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
144f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
145f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
146f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C2@u(r2)
147f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C2@l(r3)
148f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
149598ccceaSAmy Kwan; LARGE32-NEXT:    stfsx f1, r3, r4
150f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
151f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
152f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
153f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
154d5659808SAmy Kwanentry:
155d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)
156d5659808SAmy Kwan  store float %x, ptr %0, align 4
157d5659808SAmy Kwan  ret void
158d5659808SAmy Kwan}
159d5659808SAmy Kwan
160d5659808SAmy Kwandefine void @storeTLInit(float noundef %x) {
161d5659808SAmy Kwan; SMALL64-LABEL: storeTLInit:
162d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
163d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit
164598ccceaSAmy Kwan; SMALL64-NEXT:    stfsx f1, r13, r3
165d5659808SAmy Kwan; SMALL64-NEXT:    blr
166d5659808SAmy Kwan;
167d5659808SAmy Kwan; LARGE64-LABEL: storeTLInit:
168d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
169d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C3@u(r2)
170d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C3@l(r3)
171598ccceaSAmy Kwan; LARGE64-NEXT:    stfsx f1, r13, r3
172d5659808SAmy Kwan; LARGE64-NEXT:    blr
173f5ae0750SAmy Kwan;
174f5ae0750SAmy Kwan; SMALL32-LABEL: storeTLInit:
175f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
176f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
177f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
178f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit
179f5ae0750SAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
180f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
181598ccceaSAmy Kwan; SMALL32-NEXT:    stfsx f1, r3, r4
182f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
183f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
184f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
185f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
186f5ae0750SAmy Kwan;
187f5ae0750SAmy Kwan; LARGE32-LABEL: storeTLInit:
188f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
189f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
190f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
191f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
192f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C3@u(r2)
193f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C3@l(r3)
194f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
195598ccceaSAmy Kwan; LARGE32-NEXT:    stfsx f1, r3, r4
196f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
197f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
198f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
199f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
200d5659808SAmy Kwanentry:
201d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)
202d5659808SAmy Kwan  store float %x, ptr %0, align 4
203d5659808SAmy Kwan  ret void
204d5659808SAmy Kwan}
205d5659808SAmy Kwan
206d5659808SAmy Kwandefine float @loadITLUninit() {
207d5659808SAmy Kwan; SMALL64-LABEL: loadITLUninit:
208d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
209d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit
210598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f1, r13, r3
211d5659808SAmy Kwan; SMALL64-NEXT:    blr
212d5659808SAmy Kwan;
213d5659808SAmy Kwan; LARGE64-LABEL: loadITLUninit:
214d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
215d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C0@u(r2)
216d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C0@l(r3)
217598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f1, r13, r3
218d5659808SAmy Kwan; LARGE64-NEXT:    blr
219f5ae0750SAmy Kwan;
220f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLUninit:
221f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
222f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
223f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
224f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit
225f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
226598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
227598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f1, r3, r4
228f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
229f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
230f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
231f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
232f5ae0750SAmy Kwan;
233f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLUninit:
234f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
235f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
236f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
237f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
238f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C0@u(r2)
239f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C0@l(r3)
240f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
241598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f1, r3, r4
242f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
243f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
244f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
245f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
246d5659808SAmy Kwanentry:
247d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)
248d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
249d5659808SAmy Kwan  ret float %1
250d5659808SAmy Kwan}
251d5659808SAmy Kwan
252d5659808SAmy Kwandefine float @loadITLUninit2() {
253d5659808SAmy Kwan; SMALL64-LABEL: loadITLUninit2:
254d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
255d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit
256598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f0, r13, r3
257*69b056d5SQiu Chaofan; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit
258*69b056d5SQiu Chaofan; SMALL64-NEXT:    lfs f1, 0(r3)
259d5659808SAmy Kwan; SMALL64-NEXT:    fadds f1, f0, f1
260d5659808SAmy Kwan; SMALL64-NEXT:    blr
261d5659808SAmy Kwan;
262d5659808SAmy Kwan; LARGE64-LABEL: loadITLUninit2:
263d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
264d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C0@u(r2)
265d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C0@l(r3)
266598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f0, r13, r3
267*69b056d5SQiu Chaofan; LARGE64-NEXT:    addis r3, L..C4@u(r2)
268*69b056d5SQiu Chaofan; LARGE64-NEXT:    ld r3, L..C4@l(r3)
269*69b056d5SQiu Chaofan; LARGE64-NEXT:    lfs f1, 0(r3)
270d5659808SAmy Kwan; LARGE64-NEXT:    fadds f1, f0, f1
271d5659808SAmy Kwan; LARGE64-NEXT:    blr
272f5ae0750SAmy Kwan;
273f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLUninit2:
274f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
275f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
276f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
277f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C0(r2) # target-flags(ppc-tprel) @IThreadLocalVarUninit
278f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
279598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
280598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f0, r3, r4
281*69b056d5SQiu Chaofan; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit
282*69b056d5SQiu Chaofan; SMALL32-NEXT:    lfs f1, 0(r3)
283f5ae0750SAmy Kwan; SMALL32-NEXT:    fadds f1, f0, f1
284f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
285f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
286f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
287f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
288f5ae0750SAmy Kwan;
289f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLUninit2:
290f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
291f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
292f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
293f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
294f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C0@u(r2)
295f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C0@l(r3)
296f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
297598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f0, r3, r4
298f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C4@u(r2)
299f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r3, L..C4@l(r3)
300f5ae0750SAmy Kwan; LARGE32-NEXT:    lfs f1, 0(r3)
301f5ae0750SAmy Kwan; LARGE32-NEXT:    fadds f1, f0, f1
302f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
303f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
304f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
305f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
306d5659808SAmy Kwanentry:
307d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarUninit)
308d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
309d5659808SAmy Kwan  %2 = load float, ptr @VarInit, align 4
310d5659808SAmy Kwan  %add = fadd float %1, %2
311d5659808SAmy Kwan  ret float %add
312d5659808SAmy Kwan}
313d5659808SAmy Kwan
314d5659808SAmy Kwandefine float @loadITLInit() {
315d5659808SAmy Kwan; SMALL64-LABEL: loadITLInit:
316d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
317d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit
318598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f1, r13, r3
319d5659808SAmy Kwan; SMALL64-NEXT:    blr
320d5659808SAmy Kwan;
321d5659808SAmy Kwan; LARGE64-LABEL: loadITLInit:
322d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
323d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C1@u(r2)
324d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C1@l(r3)
325598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f1, r13, r3
326d5659808SAmy Kwan; LARGE64-NEXT:    blr
327f5ae0750SAmy Kwan;
328f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLInit:
329f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
330f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
331f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
332f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit
333f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
334598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
335598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f1, r3, r4
336f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
337f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
338f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
339f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
340f5ae0750SAmy Kwan;
341f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLInit:
342f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
343f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
344f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
345f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
346f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C1@u(r2)
347f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C1@l(r3)
348f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
349598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f1, r3, r4
350f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
351f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
352f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
353f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
354d5659808SAmy Kwanentry:
355d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
356d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
357d5659808SAmy Kwan  ret float %1
358d5659808SAmy Kwan}
359d5659808SAmy Kwan
360d5659808SAmy Kwandefine float @loadITLInit2() {
361d5659808SAmy Kwan; SMALL64-LABEL: loadITLInit2:
362d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
363d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit
364598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f0, r13, r3
365*69b056d5SQiu Chaofan; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit
366*69b056d5SQiu Chaofan; SMALL64-NEXT:    lfs f1, 0(r3)
367d5659808SAmy Kwan; SMALL64-NEXT:    fadds f1, f0, f1
368d5659808SAmy Kwan; SMALL64-NEXT:    blr
369d5659808SAmy Kwan;
370d5659808SAmy Kwan; LARGE64-LABEL: loadITLInit2:
371d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
372d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C1@u(r2)
373d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C1@l(r3)
374598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f0, r13, r3
375*69b056d5SQiu Chaofan; LARGE64-NEXT:    addis r3, L..C4@u(r2)
376*69b056d5SQiu Chaofan; LARGE64-NEXT:    ld r3, L..C4@l(r3)
377*69b056d5SQiu Chaofan; LARGE64-NEXT:    lfs f1, 0(r3)
378d5659808SAmy Kwan; LARGE64-NEXT:    fadds f1, f0, f1
379d5659808SAmy Kwan; LARGE64-NEXT:    blr
380f5ae0750SAmy Kwan;
381f5ae0750SAmy Kwan; SMALL32-LABEL: loadITLInit2:
382f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
383f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
384f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
385f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C1(r2) # target-flags(ppc-tprel) @IThreadLocalVarInit
386f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
387598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
388598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f0, r3, r4
389*69b056d5SQiu Chaofan; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit
390*69b056d5SQiu Chaofan; SMALL32-NEXT:    lfs f1, 0(r3)
391f5ae0750SAmy Kwan; SMALL32-NEXT:    fadds f1, f0, f1
392f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
393f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
394f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
395f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
396f5ae0750SAmy Kwan;
397f5ae0750SAmy Kwan; LARGE32-LABEL: loadITLInit2:
398f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
399f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
400f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
401f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
402f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C1@u(r2)
403f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C1@l(r3)
404f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
405598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f0, r3, r4
406f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C4@u(r2)
407f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r3, L..C4@l(r3)
408f5ae0750SAmy Kwan; LARGE32-NEXT:    lfs f1, 0(r3)
409f5ae0750SAmy Kwan; LARGE32-NEXT:    fadds f1, f0, f1
410f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
411f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
412f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
413f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
414d5659808SAmy Kwanentry:
415d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @IThreadLocalVarInit)
416d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
417d5659808SAmy Kwan  %2 = load float, ptr @VarInit, align 4
418d5659808SAmy Kwan  %add = fadd float %1, %2
419d5659808SAmy Kwan  ret float %add
420d5659808SAmy Kwan}
421d5659808SAmy Kwan
422d5659808SAmy Kwandefine float @loadTLUninit() {
423d5659808SAmy Kwan; SMALL64-LABEL: loadTLUninit:
424d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
425d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit
426598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f1, r13, r3
427d5659808SAmy Kwan; SMALL64-NEXT:    blr
428d5659808SAmy Kwan;
429d5659808SAmy Kwan; LARGE64-LABEL: loadTLUninit:
430d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
431d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C2@u(r2)
432d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C2@l(r3)
433598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f1, r13, r3
434d5659808SAmy Kwan; LARGE64-NEXT:    blr
435f5ae0750SAmy Kwan;
436f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLUninit:
437f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
438f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
439f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
440f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit
441f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
442598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
443598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f1, r3, r4
444f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
445f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
446f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
447f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
448f5ae0750SAmy Kwan;
449f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLUninit:
450f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
451f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
452f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
453f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
454f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C2@u(r2)
455f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C2@l(r3)
456f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
457598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f1, r3, r4
458f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
459f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
460f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
461f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
462d5659808SAmy Kwanentry:
463d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)
464d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
465d5659808SAmy Kwan  ret float %1
466d5659808SAmy Kwan}
467d5659808SAmy Kwan
468d5659808SAmy Kwandefine float @loadTLUninit2() {
469d5659808SAmy Kwan; SMALL64-LABEL: loadTLUninit2:
470d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
471d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit
472598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f0, r13, r3
473*69b056d5SQiu Chaofan; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit
474*69b056d5SQiu Chaofan; SMALL64-NEXT:    lfs f1, 0(r3)
475d5659808SAmy Kwan; SMALL64-NEXT:    fadds f1, f0, f1
476d5659808SAmy Kwan; SMALL64-NEXT:    blr
477d5659808SAmy Kwan;
478d5659808SAmy Kwan; LARGE64-LABEL: loadTLUninit2:
479d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
480d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C2@u(r2)
481d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C2@l(r3)
482598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f0, r13, r3
483*69b056d5SQiu Chaofan; LARGE64-NEXT:    addis r3, L..C4@u(r2)
484*69b056d5SQiu Chaofan; LARGE64-NEXT:    ld r3, L..C4@l(r3)
485*69b056d5SQiu Chaofan; LARGE64-NEXT:    lfs f1, 0(r3)
486d5659808SAmy Kwan; LARGE64-NEXT:    fadds f1, f0, f1
487d5659808SAmy Kwan; LARGE64-NEXT:    blr
488f5ae0750SAmy Kwan;
489f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLUninit2:
490f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
491f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
492f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
493f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C2(r2) # target-flags(ppc-tprel) @ThreadLocalVarUninit
494f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
495598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
496598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f0, r3, r4
497*69b056d5SQiu Chaofan; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit
498*69b056d5SQiu Chaofan; SMALL32-NEXT:    lfs f1, 0(r3)
499f5ae0750SAmy Kwan; SMALL32-NEXT:    fadds f1, f0, f1
500f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
501f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
502f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
503f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
504f5ae0750SAmy Kwan;
505f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLUninit2:
506f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
507f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
508f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
509f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
510f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C2@u(r2)
511f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C2@l(r3)
512f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
513598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f0, r3, r4
514f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C4@u(r2)
515f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r3, L..C4@l(r3)
516f5ae0750SAmy Kwan; LARGE32-NEXT:    lfs f1, 0(r3)
517f5ae0750SAmy Kwan; LARGE32-NEXT:    fadds f1, f0, f1
518f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
519f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
520f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
521f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
522d5659808SAmy Kwanentry:
523d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarUninit)
524d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
525d5659808SAmy Kwan  %2 = load float, ptr @VarInit, align 4
526d5659808SAmy Kwan  %add = fadd float %1, %2
527d5659808SAmy Kwan  ret float %add
528d5659808SAmy Kwan}
529d5659808SAmy Kwan
530d5659808SAmy Kwandefine float @loadTLInit() {
531d5659808SAmy Kwan; SMALL64-LABEL: loadTLInit:
532d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
533d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit
534598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f1, r13, r3
535d5659808SAmy Kwan; SMALL64-NEXT:    blr
536d5659808SAmy Kwan;
537d5659808SAmy Kwan; LARGE64-LABEL: loadTLInit:
538d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
539d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C3@u(r2)
540d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C3@l(r3)
541598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f1, r13, r3
542d5659808SAmy Kwan; LARGE64-NEXT:    blr
543f5ae0750SAmy Kwan;
544f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLInit:
545f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
546f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
547f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
548f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit
549f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
550598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
551598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f1, r3, r4
552f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
553f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
554f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
555f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
556f5ae0750SAmy Kwan;
557f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLInit:
558f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
559f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
560f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
561f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
562f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C3@u(r2)
563f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C3@l(r3)
564f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
565598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f1, r3, r4
566f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
567f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
568f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
569f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
570d5659808SAmy Kwanentry:
571d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)
572d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
573d5659808SAmy Kwan  ret float %1
574d5659808SAmy Kwan}
575d5659808SAmy Kwan
576d5659808SAmy Kwandefine float @loadTLInit2() {
577d5659808SAmy Kwan; SMALL64-LABEL: loadTLInit2:
578d5659808SAmy Kwan; SMALL64:       # %bb.0: # %entry
579d5659808SAmy Kwan; SMALL64-NEXT:    ld r3, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit
580598ccceaSAmy Kwan; SMALL64-NEXT:    lfsx f0, r13, r3
581*69b056d5SQiu Chaofan; SMALL64-NEXT:    ld r3, L..C4(r2) # @VarInit
582*69b056d5SQiu Chaofan; SMALL64-NEXT:    lfs f1, 0(r3)
583d5659808SAmy Kwan; SMALL64-NEXT:    fadds f1, f0, f1
584d5659808SAmy Kwan; SMALL64-NEXT:    blr
585d5659808SAmy Kwan;
586d5659808SAmy Kwan; LARGE64-LABEL: loadTLInit2:
587d5659808SAmy Kwan; LARGE64:       # %bb.0: # %entry
588d5659808SAmy Kwan; LARGE64-NEXT:    addis r3, L..C3@u(r2)
589d5659808SAmy Kwan; LARGE64-NEXT:    ld r3, L..C3@l(r3)
590598ccceaSAmy Kwan; LARGE64-NEXT:    lfsx f0, r13, r3
591*69b056d5SQiu Chaofan; LARGE64-NEXT:    addis r3, L..C4@u(r2)
592*69b056d5SQiu Chaofan; LARGE64-NEXT:    ld r3, L..C4@l(r3)
593*69b056d5SQiu Chaofan; LARGE64-NEXT:    lfs f1, 0(r3)
594d5659808SAmy Kwan; LARGE64-NEXT:    fadds f1, f0, f1
595d5659808SAmy Kwan; LARGE64-NEXT:    blr
596f5ae0750SAmy Kwan;
597f5ae0750SAmy Kwan; SMALL32-LABEL: loadTLInit2:
598f5ae0750SAmy Kwan; SMALL32:       # %bb.0: # %entry
599f5ae0750SAmy Kwan; SMALL32-NEXT:    mflr r0
600f5ae0750SAmy Kwan; SMALL32-NEXT:    stwu r1, -32(r1)
601f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r4, L..C3(r2) # target-flags(ppc-tprel) @ThreadLocalVarInit
602f5ae0750SAmy Kwan; SMALL32-NEXT:    stw r0, 40(r1)
603598ccceaSAmy Kwan; SMALL32-NEXT:    bla .__get_tpointer[PR]
604598ccceaSAmy Kwan; SMALL32-NEXT:    lfsx f0, r3, r4
605*69b056d5SQiu Chaofan; SMALL32-NEXT:    lwz r3, L..C4(r2) # @VarInit
606*69b056d5SQiu Chaofan; SMALL32-NEXT:    lfs f1, 0(r3)
607f5ae0750SAmy Kwan; SMALL32-NEXT:    fadds f1, f0, f1
608f5ae0750SAmy Kwan; SMALL32-NEXT:    addi r1, r1, 32
609f5ae0750SAmy Kwan; SMALL32-NEXT:    lwz r0, 8(r1)
610f5ae0750SAmy Kwan; SMALL32-NEXT:    mtlr r0
611f5ae0750SAmy Kwan; SMALL32-NEXT:    blr
612f5ae0750SAmy Kwan;
613f5ae0750SAmy Kwan; LARGE32-LABEL: loadTLInit2:
614f5ae0750SAmy Kwan; LARGE32:       # %bb.0: # %entry
615f5ae0750SAmy Kwan; LARGE32-NEXT:    mflr r0
616f5ae0750SAmy Kwan; LARGE32-NEXT:    stwu r1, -32(r1)
617f5ae0750SAmy Kwan; LARGE32-NEXT:    stw r0, 40(r1)
618f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C3@u(r2)
619f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r4, L..C3@l(r3)
620f5ae0750SAmy Kwan; LARGE32-NEXT:    bla .__get_tpointer[PR]
621598ccceaSAmy Kwan; LARGE32-NEXT:    lfsx f0, r3, r4
622f5ae0750SAmy Kwan; LARGE32-NEXT:    addis r3, L..C4@u(r2)
623f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r3, L..C4@l(r3)
624f5ae0750SAmy Kwan; LARGE32-NEXT:    lfs f1, 0(r3)
625f5ae0750SAmy Kwan; LARGE32-NEXT:    fadds f1, f0, f1
626f5ae0750SAmy Kwan; LARGE32-NEXT:    addi r1, r1, 32
627f5ae0750SAmy Kwan; LARGE32-NEXT:    lwz r0, 8(r1)
628f5ae0750SAmy Kwan; LARGE32-NEXT:    mtlr r0
629f5ae0750SAmy Kwan; LARGE32-NEXT:    blr
630d5659808SAmy Kwanentry:
631d5659808SAmy Kwan  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @ThreadLocalVarInit)
632d5659808SAmy Kwan  %1 = load float, ptr %0, align 4
633d5659808SAmy Kwan  %2 = load float, ptr @VarInit, align 4
634d5659808SAmy Kwan  %add = fadd float %1, %2
635d5659808SAmy Kwan  ret float %add
636d5659808SAmy Kwan}
637d5659808SAmy Kwan
638d5659808SAmy Kwan; TOC Entry Checks.
639d5659808SAmy Kwan
640d5659808SAmy Kwan; SMALL64-LABEL: .toc
641d5659808SAmy Kwan; SMALL64-LABEL: L..C0:
642d5659808SAmy Kwan; SMALL64-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le
643d5659808SAmy Kwan; SMALL64-LABEL: L..C1:
644d5659808SAmy Kwan; SMALL64-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le
645d5659808SAmy Kwan; SMALL64-LABEL: L..C2:
646d5659808SAmy Kwan; SMALL64-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le
647d5659808SAmy Kwan; SMALL64-LABEL: L..C3:
648d5659808SAmy Kwan; SMALL64-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le
649d5659808SAmy Kwan; SMALL64-LABEL: L..C4:
650d5659808SAmy Kwan; SMALL64-NEXT: .tc VarInit[TC],VarInit[RW]
651d5659808SAmy Kwan
652d5659808SAmy Kwan; LARGE64-LABEL: .toc
653d5659808SAmy Kwan; LARGE64-LABEL: L..C0:
654d5659808SAmy Kwan; LARGE64-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le
655d5659808SAmy Kwan; LARGE64-LABEL: L..C1:
656d5659808SAmy Kwan; LARGE64-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le
657d5659808SAmy Kwan; LARGE64-LABEL: L..C2:
658d5659808SAmy Kwan; LARGE64-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le
659d5659808SAmy Kwan; LARGE64-LABEL: L..C3:
660d5659808SAmy Kwan; LARGE64-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le
661d5659808SAmy Kwan; LARGE64-LABEL: L..C4:
662d5659808SAmy Kwan; LARGE64-NEXT: .tc VarInit[TE],VarInit[RW]
663f5ae0750SAmy Kwan
664f5ae0750SAmy Kwan; SMALL32-LABEL: .toc
665f5ae0750SAmy Kwan; SMALL32-LABEL: L..C0:
666f5ae0750SAmy Kwan; SMALL32-NEXT: .tc IThreadLocalVarUninit[TC],IThreadLocalVarUninit[UL]@le
667f5ae0750SAmy Kwan; SMALL32-LABEL: L..C1:
668f5ae0750SAmy Kwan; SMALL32-NEXT: .tc IThreadLocalVarInit[TC],IThreadLocalVarInit[TL]@le
669f5ae0750SAmy Kwan; SMALL32-LABEL: L..C2:
670f5ae0750SAmy Kwan; SMALL32-NEXT: .tc ThreadLocalVarUninit[TC],ThreadLocalVarUninit[TL]@le
671f5ae0750SAmy Kwan; SMALL32-LABEL: L..C3:
672f5ae0750SAmy Kwan; SMALL32-NEXT: .tc ThreadLocalVarInit[TC],ThreadLocalVarInit[TL]@le
673f5ae0750SAmy Kwan; SMALL32-LABEL: L..C4:
674f5ae0750SAmy Kwan; SMALL32-NEXT: .tc VarInit[TC],VarInit[RW]
675f5ae0750SAmy Kwan
676f5ae0750SAmy Kwan; LARGE32-LABEL: .toc
677f5ae0750SAmy Kwan; LARGE32-LABEL: L..C0:
678f5ae0750SAmy Kwan; LARGE32-NEXT: .tc IThreadLocalVarUninit[TE],IThreadLocalVarUninit[UL]@le
679f5ae0750SAmy Kwan; LARGE32-LABEL: L..C1:
680f5ae0750SAmy Kwan; LARGE32-NEXT: .tc IThreadLocalVarInit[TE],IThreadLocalVarInit[TL]@le
681f5ae0750SAmy Kwan; LARGE32-LABEL: L..C2:
682f5ae0750SAmy Kwan; LARGE32-NEXT: .tc ThreadLocalVarUninit[TE],ThreadLocalVarUninit[TL]@le
683f5ae0750SAmy Kwan; LARGE32-LABEL: L..C3:
684f5ae0750SAmy Kwan; LARGE32-NEXT: .tc ThreadLocalVarInit[TE],ThreadLocalVarInit[TL]@le
685f5ae0750SAmy Kwan; LARGE32-LABEL: L..C4:
686f5ae0750SAmy Kwan; LARGE32-NEXT: .tc VarInit[TE],VarInit[RW]
687