[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / LoongArch / tls-models.ll
blobdbd7bf6a81269cb6010c5c5515e62e5047c39b2f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA32PIC
3 ; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64PIC
4 ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64LARGEPIC
5 ; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32NOPIC
6 ; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64NOPIC
7 ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large < %s | FileCheck %s --check-prefix=LA64LARGENOPIC
8 ; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic --enable-tlsdesc < %s \
9 ; RUN:     | FileCheck %s --check-prefix=LA32DESC
10 ; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic --enable-tlsdesc < %s \
11 ; RUN:     | FileCheck %s --check-prefix=LA64DESC
12 ; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic --enable-tlsdesc \
13 ; RUN:     --code-model=large < %s | FileCheck %s --check-prefix=DESC64
15 ;; Check that TLS symbols are lowered correctly based on the specified
16 ;; model. Make sure they're external to avoid them all being optimised to Local
17 ;; Exec for the executable.
19 @unspecified = external thread_local global i32
20 @ld = external thread_local(localdynamic) global i32
21 @ie = external thread_local(initialexec) global i32
22 @le = external thread_local(localexec) global i32
24 ;; No model specified (global dynamic)
26 define ptr @f1() nounwind {
27 ; LA32PIC-LABEL: f1:
28 ; LA32PIC:       # %bb.0: # %entry
29 ; LA32PIC-NEXT:    addi.w $sp, $sp, -16
30 ; LA32PIC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
31 ; LA32PIC-NEXT:    pcalau12i $a0, %gd_pc_hi20(unspecified)
32 ; LA32PIC-NEXT:    addi.w $a0, $a0, %got_pc_lo12(unspecified)
33 ; LA32PIC-NEXT:    bl %plt(__tls_get_addr)
34 ; LA32PIC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
35 ; LA32PIC-NEXT:    addi.w $sp, $sp, 16
36 ; LA32PIC-NEXT:    ret
38 ; LA64PIC-LABEL: f1:
39 ; LA64PIC:       # %bb.0: # %entry
40 ; LA64PIC-NEXT:    addi.d $sp, $sp, -16
41 ; LA64PIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
42 ; LA64PIC-NEXT:    pcalau12i $a0, %gd_pc_hi20(unspecified)
43 ; LA64PIC-NEXT:    addi.d $a0, $a0, %got_pc_lo12(unspecified)
44 ; LA64PIC-NEXT:    bl %plt(__tls_get_addr)
45 ; LA64PIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
46 ; LA64PIC-NEXT:    addi.d $sp, $sp, 16
47 ; LA64PIC-NEXT:    ret
49 ; LA64LARGEPIC-LABEL: f1:
50 ; LA64LARGEPIC:       # %bb.0: # %entry
51 ; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, -16
52 ; LA64LARGEPIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
53 ; LA64LARGEPIC-NEXT:    pcalau12i $a0, %gd_pc_hi20(unspecified)
54 ; LA64LARGEPIC-NEXT:    addi.d $a1, $zero, %got_pc_lo12(unspecified)
55 ; LA64LARGEPIC-NEXT:    lu32i.d $a1, %got64_pc_lo20(unspecified)
56 ; LA64LARGEPIC-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(unspecified)
57 ; LA64LARGEPIC-NEXT:    add.d $a0, $a1, $a0
58 ; LA64LARGEPIC-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)
59 ; LA64LARGEPIC-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)
60 ; LA64LARGEPIC-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)
61 ; LA64LARGEPIC-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)
62 ; LA64LARGEPIC-NEXT:    ldx.d $ra, $ra, $a1
63 ; LA64LARGEPIC-NEXT:    jirl $ra, $ra, 0
64 ; LA64LARGEPIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
65 ; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, 16
66 ; LA64LARGEPIC-NEXT:    ret
68 ; LA32NOPIC-LABEL: f1:
69 ; LA32NOPIC:       # %bb.0: # %entry
70 ; LA32NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(unspecified)
71 ; LA32NOPIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(unspecified)
72 ; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
73 ; LA32NOPIC-NEXT:    ret
75 ; LA64NOPIC-LABEL: f1:
76 ; LA64NOPIC:       # %bb.0: # %entry
77 ; LA64NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(unspecified)
78 ; LA64NOPIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(unspecified)
79 ; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
80 ; LA64NOPIC-NEXT:    ret
82 ; LA64LARGENOPIC-LABEL: f1:
83 ; LA64LARGENOPIC:       # %bb.0: # %entry
84 ; LA64LARGENOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(unspecified)
85 ; LA64LARGENOPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(unspecified)
86 ; LA64LARGENOPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(unspecified)
87 ; LA64LARGENOPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(unspecified)
88 ; LA64LARGENOPIC-NEXT:    ldx.d $a0, $a1, $a0
89 ; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
90 ; LA64LARGENOPIC-NEXT:    ret
92 ; LA32DESC-LABEL: f1:
93 ; LA32DESC:       # %bb.0: # %entry
94 ; LA32DESC-NEXT:    addi.w $sp, $sp, -16
95 ; LA32DESC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
96 ; LA32DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(unspecified)
97 ; LA32DESC-NEXT:    addi.w $a0, $a0, %desc_pc_lo12(unspecified)
98 ; LA32DESC-NEXT:    ld.w $ra, $a0, %desc_ld(unspecified)
99 ; LA32DESC-NEXT:    jirl $ra, $ra, %desc_call(unspecified)
100 ; LA32DESC-NEXT:    add.w $a0, $a0, $tp
101 ; LA32DESC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
102 ; LA32DESC-NEXT:    addi.w $sp, $sp, 16
103 ; LA32DESC-NEXT:    ret
105 ; LA64DESC-LABEL: f1:
106 ; LA64DESC:       # %bb.0: # %entry
107 ; LA64DESC-NEXT:    addi.d $sp, $sp, -16
108 ; LA64DESC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
109 ; LA64DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(unspecified)
110 ; LA64DESC-NEXT:    addi.d $a0, $a0, %desc_pc_lo12(unspecified)
111 ; LA64DESC-NEXT:    ld.d $ra, $a0, %desc_ld(unspecified)
112 ; LA64DESC-NEXT:    jirl $ra, $ra, %desc_call(unspecified)
113 ; LA64DESC-NEXT:    add.d $a0, $a0, $tp
114 ; LA64DESC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
115 ; LA64DESC-NEXT:    addi.d $sp, $sp, 16
116 ; LA64DESC-NEXT:    ret
118 ; DESC64-LABEL: f1:
119 ; DESC64:       # %bb.0: # %entry
120 ; DESC64-NEXT:    addi.d $sp, $sp, -16
121 ; DESC64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
122 ; DESC64-NEXT:    pcalau12i $a0, %desc_pc_hi20(unspecified)
123 ; DESC64-NEXT:    addi.d $a1, $zero, %desc_pc_lo12(unspecified)
124 ; DESC64-NEXT:    lu32i.d $a1, %desc64_pc_lo20(unspecified)
125 ; DESC64-NEXT:    lu52i.d $a1, $a1, %desc64_pc_hi12(unspecified)
126 ; DESC64-NEXT:    add.d $a0, $a0, $a1
127 ; DESC64-NEXT:    ld.d $ra, $a0, %desc_ld(unspecified)
128 ; DESC64-NEXT:    jirl $ra, $ra, %desc_call(unspecified)
129 ; DESC64-NEXT:    add.d $a0, $a0, $tp
130 ; DESC64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
131 ; DESC64-NEXT:    addi.d $sp, $sp, 16
132 ; DESC64-NEXT:    ret
133 entry:
134   ret ptr @unspecified
137 ;; localdynamic specified
139 define ptr @f2() nounwind {
140 ; LA32PIC-LABEL: f2:
141 ; LA32PIC:       # %bb.0: # %entry
142 ; LA32PIC-NEXT:    addi.w $sp, $sp, -16
143 ; LA32PIC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
144 ; LA32PIC-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)
145 ; LA32PIC-NEXT:    addi.w $a0, $a0, %got_pc_lo12(ld)
146 ; LA32PIC-NEXT:    bl %plt(__tls_get_addr)
147 ; LA32PIC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
148 ; LA32PIC-NEXT:    addi.w $sp, $sp, 16
149 ; LA32PIC-NEXT:    ret
151 ; LA64PIC-LABEL: f2:
152 ; LA64PIC:       # %bb.0: # %entry
153 ; LA64PIC-NEXT:    addi.d $sp, $sp, -16
154 ; LA64PIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
155 ; LA64PIC-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)
156 ; LA64PIC-NEXT:    addi.d $a0, $a0, %got_pc_lo12(ld)
157 ; LA64PIC-NEXT:    bl %plt(__tls_get_addr)
158 ; LA64PIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
159 ; LA64PIC-NEXT:    addi.d $sp, $sp, 16
160 ; LA64PIC-NEXT:    ret
162 ; LA64LARGEPIC-LABEL: f2:
163 ; LA64LARGEPIC:       # %bb.0: # %entry
164 ; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, -16
165 ; LA64LARGEPIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
166 ; LA64LARGEPIC-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)
167 ; LA64LARGEPIC-NEXT:    addi.d $a1, $zero, %got_pc_lo12(ld)
168 ; LA64LARGEPIC-NEXT:    lu32i.d $a1, %got64_pc_lo20(ld)
169 ; LA64LARGEPIC-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(ld)
170 ; LA64LARGEPIC-NEXT:    add.d $a0, $a1, $a0
171 ; LA64LARGEPIC-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)
172 ; LA64LARGEPIC-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)
173 ; LA64LARGEPIC-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)
174 ; LA64LARGEPIC-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)
175 ; LA64LARGEPIC-NEXT:    ldx.d $ra, $ra, $a1
176 ; LA64LARGEPIC-NEXT:    jirl $ra, $ra, 0
177 ; LA64LARGEPIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
178 ; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, 16
179 ; LA64LARGEPIC-NEXT:    ret
181 ; LA32NOPIC-LABEL: f2:
182 ; LA32NOPIC:       # %bb.0: # %entry
183 ; LA32NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ld)
184 ; LA32NOPIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ld)
185 ; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
186 ; LA32NOPIC-NEXT:    ret
188 ; LA64NOPIC-LABEL: f2:
189 ; LA64NOPIC:       # %bb.0: # %entry
190 ; LA64NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ld)
191 ; LA64NOPIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ld)
192 ; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
193 ; LA64NOPIC-NEXT:    ret
195 ; LA64LARGENOPIC-LABEL: f2:
196 ; LA64LARGENOPIC:       # %bb.0: # %entry
197 ; LA64LARGENOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ld)
198 ; LA64LARGENOPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ld)
199 ; LA64LARGENOPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ld)
200 ; LA64LARGENOPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ld)
201 ; LA64LARGENOPIC-NEXT:    ldx.d $a0, $a1, $a0
202 ; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
203 ; LA64LARGENOPIC-NEXT:    ret
205 ; LA32DESC-LABEL: f2:
206 ; LA32DESC:       # %bb.0: # %entry
207 ; LA32DESC-NEXT:    addi.w $sp, $sp, -16
208 ; LA32DESC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
209 ; LA32DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(ld)
210 ; LA32DESC-NEXT:    addi.w $a0, $a0, %desc_pc_lo12(ld)
211 ; LA32DESC-NEXT:    ld.w $ra, $a0, %desc_ld(ld)
212 ; LA32DESC-NEXT:    jirl $ra, $ra, %desc_call(ld)
213 ; LA32DESC-NEXT:    add.w $a0, $a0, $tp
214 ; LA32DESC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
215 ; LA32DESC-NEXT:    addi.w $sp, $sp, 16
216 ; LA32DESC-NEXT:    ret
218 ; LA64DESC-LABEL: f2:
219 ; LA64DESC:       # %bb.0: # %entry
220 ; LA64DESC-NEXT:    addi.d $sp, $sp, -16
221 ; LA64DESC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
222 ; LA64DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(ld)
223 ; LA64DESC-NEXT:    addi.d $a0, $a0, %desc_pc_lo12(ld)
224 ; LA64DESC-NEXT:    ld.d $ra, $a0, %desc_ld(ld)
225 ; LA64DESC-NEXT:    jirl $ra, $ra, %desc_call(ld)
226 ; LA64DESC-NEXT:    add.d $a0, $a0, $tp
227 ; LA64DESC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
228 ; LA64DESC-NEXT:    addi.d $sp, $sp, 16
229 ; LA64DESC-NEXT:    ret
231 ; DESC64-LABEL: f2:
232 ; DESC64:       # %bb.0: # %entry
233 ; DESC64-NEXT:    addi.d $sp, $sp, -16
234 ; DESC64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
235 ; DESC64-NEXT:    pcalau12i $a0, %desc_pc_hi20(ld)
236 ; DESC64-NEXT:    addi.d $a1, $zero, %desc_pc_lo12(ld)
237 ; DESC64-NEXT:    lu32i.d $a1, %desc64_pc_lo20(ld)
238 ; DESC64-NEXT:    lu52i.d $a1, $a1, %desc64_pc_hi12(ld)
239 ; DESC64-NEXT:    add.d $a0, $a0, $a1
240 ; DESC64-NEXT:    ld.d $ra, $a0, %desc_ld(ld)
241 ; DESC64-NEXT:    jirl $ra, $ra, %desc_call(ld)
242 ; DESC64-NEXT:    add.d $a0, $a0, $tp
243 ; DESC64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
244 ; DESC64-NEXT:    addi.d $sp, $sp, 16
245 ; DESC64-NEXT:    ret
246 entry:
247   ret ptr @ld
250 ;; initialexec specified
252 define ptr @f3() nounwind {
253 ; LA32PIC-LABEL: f3:
254 ; LA32PIC:       # %bb.0: # %entry
255 ; LA32PIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
256 ; LA32PIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ie)
257 ; LA32PIC-NEXT:    add.w $a0, $a0, $tp
258 ; LA32PIC-NEXT:    ret
260 ; LA64PIC-LABEL: f3:
261 ; LA64PIC:       # %bb.0: # %entry
262 ; LA64PIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
263 ; LA64PIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ie)
264 ; LA64PIC-NEXT:    add.d $a0, $a0, $tp
265 ; LA64PIC-NEXT:    ret
267 ; LA64LARGEPIC-LABEL: f3:
268 ; LA64LARGEPIC:       # %bb.0: # %entry
269 ; LA64LARGEPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
270 ; LA64LARGEPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)
271 ; LA64LARGEPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)
272 ; LA64LARGEPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)
273 ; LA64LARGEPIC-NEXT:    ldx.d $a0, $a1, $a0
274 ; LA64LARGEPIC-NEXT:    add.d $a0, $a0, $tp
275 ; LA64LARGEPIC-NEXT:    ret
277 ; LA32NOPIC-LABEL: f3:
278 ; LA32NOPIC:       # %bb.0: # %entry
279 ; LA32NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
280 ; LA32NOPIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ie)
281 ; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
282 ; LA32NOPIC-NEXT:    ret
284 ; LA64NOPIC-LABEL: f3:
285 ; LA64NOPIC:       # %bb.0: # %entry
286 ; LA64NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
287 ; LA64NOPIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ie)
288 ; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
289 ; LA64NOPIC-NEXT:    ret
291 ; LA64LARGENOPIC-LABEL: f3:
292 ; LA64LARGENOPIC:       # %bb.0: # %entry
293 ; LA64LARGENOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
294 ; LA64LARGENOPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)
295 ; LA64LARGENOPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)
296 ; LA64LARGENOPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)
297 ; LA64LARGENOPIC-NEXT:    ldx.d $a0, $a1, $a0
298 ; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
299 ; LA64LARGENOPIC-NEXT:    ret
301 ; LA32DESC-LABEL: f3:
302 ; LA32DESC:       # %bb.0: # %entry
303 ; LA32DESC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
304 ; LA32DESC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ie)
305 ; LA32DESC-NEXT:    add.w $a0, $a0, $tp
306 ; LA32DESC-NEXT:    ret
308 ; LA64DESC-LABEL: f3:
309 ; LA64DESC:       # %bb.0: # %entry
310 ; LA64DESC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
311 ; LA64DESC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ie)
312 ; LA64DESC-NEXT:    add.d $a0, $a0, $tp
313 ; LA64DESC-NEXT:    ret
315 ; DESC64-LABEL: f3:
316 ; DESC64:       # %bb.0: # %entry
317 ; DESC64-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
318 ; DESC64-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)
319 ; DESC64-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)
320 ; DESC64-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)
321 ; DESC64-NEXT:    ldx.d $a0, $a1, $a0
322 ; DESC64-NEXT:    add.d $a0, $a0, $tp
323 ; DESC64-NEXT:    ret
324 entry:
325   ret ptr @ie
328 ;; localexec specified
330 define ptr @f4() nounwind {
331 ; LA32PIC-LABEL: f4:
332 ; LA32PIC:       # %bb.0: # %entry
333 ; LA32PIC-NEXT:    lu12i.w $a0, %le_hi20(le)
334 ; LA32PIC-NEXT:    ori $a0, $a0, %le_lo12(le)
335 ; LA32PIC-NEXT:    add.w $a0, $a0, $tp
336 ; LA32PIC-NEXT:    ret
338 ; LA64PIC-LABEL: f4:
339 ; LA64PIC:       # %bb.0: # %entry
340 ; LA64PIC-NEXT:    lu12i.w $a0, %le_hi20(le)
341 ; LA64PIC-NEXT:    ori $a0, $a0, %le_lo12(le)
342 ; LA64PIC-NEXT:    add.d $a0, $a0, $tp
343 ; LA64PIC-NEXT:    ret
345 ; LA64LARGEPIC-LABEL: f4:
346 ; LA64LARGEPIC:       # %bb.0: # %entry
347 ; LA64LARGEPIC-NEXT:    lu12i.w $a0, %le_hi20(le)
348 ; LA64LARGEPIC-NEXT:    ori $a0, $a0, %le_lo12(le)
349 ; LA64LARGEPIC-NEXT:    lu32i.d $a0, %le64_lo20(le)
350 ; LA64LARGEPIC-NEXT:    lu52i.d $a0, $a0, %le64_hi12(le)
351 ; LA64LARGEPIC-NEXT:    add.d $a0, $a0, $tp
352 ; LA64LARGEPIC-NEXT:    ret
354 ; LA32NOPIC-LABEL: f4:
355 ; LA32NOPIC:       # %bb.0: # %entry
356 ; LA32NOPIC-NEXT:    lu12i.w $a0, %le_hi20(le)
357 ; LA32NOPIC-NEXT:    ori $a0, $a0, %le_lo12(le)
358 ; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
359 ; LA32NOPIC-NEXT:    ret
361 ; LA64NOPIC-LABEL: f4:
362 ; LA64NOPIC:       # %bb.0: # %entry
363 ; LA64NOPIC-NEXT:    lu12i.w $a0, %le_hi20(le)
364 ; LA64NOPIC-NEXT:    ori $a0, $a0, %le_lo12(le)
365 ; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
366 ; LA64NOPIC-NEXT:    ret
368 ; LA64LARGENOPIC-LABEL: f4:
369 ; LA64LARGENOPIC:       # %bb.0: # %entry
370 ; LA64LARGENOPIC-NEXT:    lu12i.w $a0, %le_hi20(le)
371 ; LA64LARGENOPIC-NEXT:    ori $a0, $a0, %le_lo12(le)
372 ; LA64LARGENOPIC-NEXT:    lu32i.d $a0, %le64_lo20(le)
373 ; LA64LARGENOPIC-NEXT:    lu52i.d $a0, $a0, %le64_hi12(le)
374 ; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
375 ; LA64LARGENOPIC-NEXT:    ret
377 ; LA32DESC-LABEL: f4:
378 ; LA32DESC:       # %bb.0: # %entry
379 ; LA32DESC-NEXT:    lu12i.w $a0, %le_hi20(le)
380 ; LA32DESC-NEXT:    ori $a0, $a0, %le_lo12(le)
381 ; LA32DESC-NEXT:    add.w $a0, $a0, $tp
382 ; LA32DESC-NEXT:    ret
384 ; LA64DESC-LABEL: f4:
385 ; LA64DESC:       # %bb.0: # %entry
386 ; LA64DESC-NEXT:    lu12i.w $a0, %le_hi20(le)
387 ; LA64DESC-NEXT:    ori $a0, $a0, %le_lo12(le)
388 ; LA64DESC-NEXT:    add.d $a0, $a0, $tp
389 ; LA64DESC-NEXT:    ret
391 ; DESC64-LABEL: f4:
392 ; DESC64:       # %bb.0: # %entry
393 ; DESC64-NEXT:    lu12i.w $a0, %le_hi20(le)
394 ; DESC64-NEXT:    ori $a0, $a0, %le_lo12(le)
395 ; DESC64-NEXT:    lu32i.d $a0, %le64_lo20(le)
396 ; DESC64-NEXT:    lu52i.d $a0, $a0, %le64_hi12(le)
397 ; DESC64-NEXT:    add.d $a0, $a0, $tp
398 ; DESC64-NEXT:    ret
399 entry:
400   ret ptr @le