[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / LoongArch / merge-base-offset.ll
blob9df5532d51179ec5955e34cee5322642b6b2e599
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 --mattr=+lasx --verify-machineinstrs < %s \
3 ; RUN:   | FileCheck --check-prefix=LA32 %s
4 ; RUN: llc --mtriple=loongarch64 --mattr=+lasx --verify-machineinstrs < %s \
5 ; RUN:   | FileCheck --check-prefix=LA64 %s
6 ; RUN: llc --mtriple=loongarch64 --mattr=+lasx --verify-machineinstrs \
7 ; RUN:   --code-model=large < %s | FileCheck --check-prefix=LA64-LARGE %s
9 @g_i8 = dso_local global i8 0
11 define dso_local signext i8 @load_s8() nounwind {
12 ; LA32-LABEL: load_s8:
13 ; LA32:       # %bb.0: # %entry
14 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
15 ; LA32-NEXT:    ld.b $a0, $a0, %pc_lo12(g_i8)
16 ; LA32-NEXT:    ret
18 ; LA64-LABEL: load_s8:
19 ; LA64:       # %bb.0: # %entry
20 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
21 ; LA64-NEXT:    ld.b $a0, $a0, %pc_lo12(g_i8)
22 ; LA64-NEXT:    ret
24 ; LA64-LARGE-LABEL: load_s8:
25 ; LA64-LARGE:       # %bb.0: # %entry
26 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
27 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8)
28 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8)
29 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8)
30 ; LA64-LARGE-NEXT:    ldx.b $a0, $a1, $a0
31 ; LA64-LARGE-NEXT:    ret
32 entry:
33   %0 = load i8, ptr @g_i8
34   ret i8 %0
37 define dso_local zeroext i8 @load_u8() nounwind {
38 ; LA32-LABEL: load_u8:
39 ; LA32:       # %bb.0: # %entry
40 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
41 ; LA32-NEXT:    ld.bu $a0, $a0, %pc_lo12(g_i8)
42 ; LA32-NEXT:    ret
44 ; LA64-LABEL: load_u8:
45 ; LA64:       # %bb.0: # %entry
46 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
47 ; LA64-NEXT:    ld.bu $a0, $a0, %pc_lo12(g_i8)
48 ; LA64-NEXT:    ret
50 ; LA64-LARGE-LABEL: load_u8:
51 ; LA64-LARGE:       # %bb.0: # %entry
52 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
53 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8)
54 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8)
55 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8)
56 ; LA64-LARGE-NEXT:    ldx.bu $a0, $a1, $a0
57 ; LA64-LARGE-NEXT:    ret
58 entry:
59   %0 = load i8, ptr @g_i8
60   ret i8 %0
63 define dso_local void @store_i8() nounwind {
64 ; LA32-LABEL: store_i8:
65 ; LA32:       # %bb.0: # %entry
66 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
67 ; LA32-NEXT:    ori $a1, $zero, 1
68 ; LA32-NEXT:    st.b $a1, $a0, %pc_lo12(g_i8)
69 ; LA32-NEXT:    ret
71 ; LA64-LABEL: store_i8:
72 ; LA64:       # %bb.0: # %entry
73 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
74 ; LA64-NEXT:    ori $a1, $zero, 1
75 ; LA64-NEXT:    st.b $a1, $a0, %pc_lo12(g_i8)
76 ; LA64-NEXT:    ret
78 ; LA64-LARGE-LABEL: store_i8:
79 ; LA64-LARGE:       # %bb.0: # %entry
80 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
81 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8)
82 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8)
83 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8)
84 ; LA64-LARGE-NEXT:    ori $a2, $zero, 1
85 ; LA64-LARGE-NEXT:    stx.b $a2, $a1, $a0
86 ; LA64-LARGE-NEXT:    ret
87 entry:
88   store i8 1, ptr @g_i8
89   ret void
92 @g_i16 = dso_local global i16 0
94 define dso_local signext i16 @load_s16() nounwind {
95 ; LA32-LABEL: load_s16:
96 ; LA32:       # %bb.0: # %entry
97 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
98 ; LA32-NEXT:    ld.h $a0, $a0, %pc_lo12(g_i16)
99 ; LA32-NEXT:    ret
101 ; LA64-LABEL: load_s16:
102 ; LA64:       # %bb.0: # %entry
103 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
104 ; LA64-NEXT:    ld.h $a0, $a0, %pc_lo12(g_i16)
105 ; LA64-NEXT:    ret
107 ; LA64-LARGE-LABEL: load_s16:
108 ; LA64-LARGE:       # %bb.0: # %entry
109 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
110 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i16)
111 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i16)
112 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i16)
113 ; LA64-LARGE-NEXT:    ldx.h $a0, $a1, $a0
114 ; LA64-LARGE-NEXT:    ret
115 entry:
116   %0 = load i16, ptr @g_i16
117   ret i16 %0
120 define dso_local zeroext i16 @load_u16() nounwind {
121 ; LA32-LABEL: load_u16:
122 ; LA32:       # %bb.0: # %entry
123 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
124 ; LA32-NEXT:    ld.hu $a0, $a0, %pc_lo12(g_i16)
125 ; LA32-NEXT:    ret
127 ; LA64-LABEL: load_u16:
128 ; LA64:       # %bb.0: # %entry
129 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
130 ; LA64-NEXT:    ld.hu $a0, $a0, %pc_lo12(g_i16)
131 ; LA64-NEXT:    ret
133 ; LA64-LARGE-LABEL: load_u16:
134 ; LA64-LARGE:       # %bb.0: # %entry
135 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
136 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i16)
137 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i16)
138 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i16)
139 ; LA64-LARGE-NEXT:    ldx.hu $a0, $a1, $a0
140 ; LA64-LARGE-NEXT:    ret
141 entry:
142   %0 = load i16, ptr @g_i16
143   ret i16 %0
146 define dso_local void @store_i16() nounwind {
147 ; LA32-LABEL: store_i16:
148 ; LA32:       # %bb.0: # %entry
149 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
150 ; LA32-NEXT:    ori $a1, $zero, 1
151 ; LA32-NEXT:    st.h $a1, $a0, %pc_lo12(g_i16)
152 ; LA32-NEXT:    ret
154 ; LA64-LABEL: store_i16:
155 ; LA64:       # %bb.0: # %entry
156 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
157 ; LA64-NEXT:    ori $a1, $zero, 1
158 ; LA64-NEXT:    st.h $a1, $a0, %pc_lo12(g_i16)
159 ; LA64-NEXT:    ret
161 ; LA64-LARGE-LABEL: store_i16:
162 ; LA64-LARGE:       # %bb.0: # %entry
163 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i16)
164 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i16)
165 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i16)
166 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i16)
167 ; LA64-LARGE-NEXT:    ori $a2, $zero, 1
168 ; LA64-LARGE-NEXT:    stx.h $a2, $a1, $a0
169 ; LA64-LARGE-NEXT:    ret
170 entry:
171   store i16 1, ptr @g_i16
172   ret void
175 @g_i32 = dso_local global i32 0
177 define dso_local signext i32 @load_s32() nounwind {
178 ; LA32-LABEL: load_s32:
179 ; LA32:       # %bb.0: # %entry
180 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
181 ; LA32-NEXT:    ld.w $a0, $a0, %pc_lo12(g_i32)
182 ; LA32-NEXT:    ret
184 ; LA64-LABEL: load_s32:
185 ; LA64:       # %bb.0: # %entry
186 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
187 ; LA64-NEXT:    ld.w $a0, $a0, %pc_lo12(g_i32)
188 ; LA64-NEXT:    ret
190 ; LA64-LARGE-LABEL: load_s32:
191 ; LA64-LARGE:       # %bb.0: # %entry
192 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
193 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32)
194 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32)
195 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32)
196 ; LA64-LARGE-NEXT:    ldx.w $a0, $a1, $a0
197 ; LA64-LARGE-NEXT:    ret
198 entry:
199   %0 = load i32, ptr @g_i32
200   ret i32 %0
203 define dso_local zeroext i32 @load_u32() nounwind {
204 ; LA32-LABEL: load_u32:
205 ; LA32:       # %bb.0: # %entry
206 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
207 ; LA32-NEXT:    ld.w $a0, $a0, %pc_lo12(g_i32)
208 ; LA32-NEXT:    ret
210 ; LA64-LABEL: load_u32:
211 ; LA64:       # %bb.0: # %entry
212 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
213 ; LA64-NEXT:    ld.wu $a0, $a0, %pc_lo12(g_i32)
214 ; LA64-NEXT:    ret
216 ; LA64-LARGE-LABEL: load_u32:
217 ; LA64-LARGE:       # %bb.0: # %entry
218 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
219 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32)
220 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32)
221 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32)
222 ; LA64-LARGE-NEXT:    ldx.wu $a0, $a1, $a0
223 ; LA64-LARGE-NEXT:    ret
224 entry:
225   %0 = load i32, ptr @g_i32
226   ret i32 %0
229 define dso_local void @store_i32() nounwind {
230 ; LA32-LABEL: store_i32:
231 ; LA32:       # %bb.0: # %entry
232 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
233 ; LA32-NEXT:    ori $a1, $zero, 1
234 ; LA32-NEXT:    st.w $a1, $a0, %pc_lo12(g_i32)
235 ; LA32-NEXT:    ret
237 ; LA64-LABEL: store_i32:
238 ; LA64:       # %bb.0: # %entry
239 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
240 ; LA64-NEXT:    ori $a1, $zero, 1
241 ; LA64-NEXT:    st.w $a1, $a0, %pc_lo12(g_i32)
242 ; LA64-NEXT:    ret
244 ; LA64-LARGE-LABEL: store_i32:
245 ; LA64-LARGE:       # %bb.0: # %entry
246 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32)
247 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32)
248 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32)
249 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32)
250 ; LA64-LARGE-NEXT:    ori $a2, $zero, 1
251 ; LA64-LARGE-NEXT:    stx.w $a2, $a1, $a0
252 ; LA64-LARGE-NEXT:    ret
253 entry:
254   store i32 1, ptr @g_i32
255   ret void
258 @g_i64 = dso_local global i64 0
260 define dso_local i64 @load_64() nounwind {
261 ; LA32-LABEL: load_64:
262 ; LA32:       # %bb.0: # %entry
263 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i64)
264 ; LA32-NEXT:    addi.w $a1, $a0, %pc_lo12(g_i64)
265 ; LA32-NEXT:    ld.w $a0, $a1, 0
266 ; LA32-NEXT:    ld.w $a1, $a1, 4
267 ; LA32-NEXT:    ret
269 ; LA64-LABEL: load_64:
270 ; LA64:       # %bb.0: # %entry
271 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i64)
272 ; LA64-NEXT:    ld.d $a0, $a0, %pc_lo12(g_i64)
273 ; LA64-NEXT:    ret
275 ; LA64-LARGE-LABEL: load_64:
276 ; LA64-LARGE:       # %bb.0: # %entry
277 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i64)
278 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i64)
279 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i64)
280 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i64)
281 ; LA64-LARGE-NEXT:    ldx.d $a0, $a1, $a0
282 ; LA64-LARGE-NEXT:    ret
283 entry:
284   %0 = load i64, ptr @g_i64
285   ret i64 %0
288 define dso_local void @store_i64() nounwind {
289 ; LA32-LABEL: store_i64:
290 ; LA32:       # %bb.0: # %entry
291 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i64)
292 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_i64)
293 ; LA32-NEXT:    st.w $zero, $a0, 4
294 ; LA32-NEXT:    ori $a1, $zero, 1
295 ; LA32-NEXT:    st.w $a1, $a0, 0
296 ; LA32-NEXT:    ret
298 ; LA64-LABEL: store_i64:
299 ; LA64:       # %bb.0: # %entry
300 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i64)
301 ; LA64-NEXT:    ori $a1, $zero, 1
302 ; LA64-NEXT:    st.d $a1, $a0, %pc_lo12(g_i64)
303 ; LA64-NEXT:    ret
305 ; LA64-LARGE-LABEL: store_i64:
306 ; LA64-LARGE:       # %bb.0: # %entry
307 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i64)
308 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i64)
309 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i64)
310 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i64)
311 ; LA64-LARGE-NEXT:    ori $a2, $zero, 1
312 ; LA64-LARGE-NEXT:    stx.d $a2, $a1, $a0
313 ; LA64-LARGE-NEXT:    ret
314 entry:
315   store i64 1, ptr @g_i64
316   ret void
319 @g_f32 = dso_local global float 0.0
321 define dso_local float @load_f32() nounwind {
322 ; LA32-LABEL: load_f32:
323 ; LA32:       # %bb.0: # %entry
324 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_f32)
325 ; LA32-NEXT:    fld.s $fa0, $a0, %pc_lo12(g_f32)
326 ; LA32-NEXT:    ret
328 ; LA64-LABEL: load_f32:
329 ; LA64:       # %bb.0: # %entry
330 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_f32)
331 ; LA64-NEXT:    fld.s $fa0, $a0, %pc_lo12(g_f32)
332 ; LA64-NEXT:    ret
334 ; LA64-LARGE-LABEL: load_f32:
335 ; LA64-LARGE:       # %bb.0: # %entry
336 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_f32)
337 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_f32)
338 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_f32)
339 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_f32)
340 ; LA64-LARGE-NEXT:    fldx.s $fa0, $a1, $a0
341 ; LA64-LARGE-NEXT:    ret
342 entry:
343   %0 = load float, ptr @g_f32
344   ret float %0
347 define dso_local void @store_f32() nounwind {
348 ; LA32-LABEL: store_f32:
349 ; LA32:       # %bb.0: # %entry
350 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_f32)
351 ; LA32-NEXT:    lu12i.w $a1, 260096
352 ; LA32-NEXT:    st.w $a1, $a0, %pc_lo12(g_f32)
353 ; LA32-NEXT:    ret
355 ; LA64-LABEL: store_f32:
356 ; LA64:       # %bb.0: # %entry
357 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_f32)
358 ; LA64-NEXT:    lu12i.w $a1, 260096
359 ; LA64-NEXT:    st.w $a1, $a0, %pc_lo12(g_f32)
360 ; LA64-NEXT:    ret
362 ; LA64-LARGE-LABEL: store_f32:
363 ; LA64-LARGE:       # %bb.0: # %entry
364 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_f32)
365 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_f32)
366 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_f32)
367 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_f32)
368 ; LA64-LARGE-NEXT:    lu12i.w $a2, 260096
369 ; LA64-LARGE-NEXT:    stx.w $a2, $a1, $a0
370 ; LA64-LARGE-NEXT:    ret
371 entry:
372   store float 1.0, ptr @g_f32
373   ret void
376 @g_f64 = dso_local global double 0.0
378 define dso_local double @load_f64() nounwind {
379 ; LA32-LABEL: load_f64:
380 ; LA32:       # %bb.0: # %entry
381 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_f64)
382 ; LA32-NEXT:    fld.d $fa0, $a0, %pc_lo12(g_f64)
383 ; LA32-NEXT:    ret
385 ; LA64-LABEL: load_f64:
386 ; LA64:       # %bb.0: # %entry
387 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_f64)
388 ; LA64-NEXT:    fld.d $fa0, $a0, %pc_lo12(g_f64)
389 ; LA64-NEXT:    ret
391 ; LA64-LARGE-LABEL: load_f64:
392 ; LA64-LARGE:       # %bb.0: # %entry
393 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_f64)
394 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_f64)
395 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_f64)
396 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_f64)
397 ; LA64-LARGE-NEXT:    fldx.d $fa0, $a1, $a0
398 ; LA64-LARGE-NEXT:    ret
399 entry:
400   %0 = load double, ptr @g_f64
401   ret double %0
404 define dso_local void @store_f64() nounwind {
405 ; LA32-LABEL: store_f64:
406 ; LA32:       # %bb.0: # %entry
407 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_f64)
408 ; LA32-NEXT:    vldi $vr0, -912
409 ; LA32-NEXT:    fst.d $fa0, $a0, %pc_lo12(g_f64)
410 ; LA32-NEXT:    ret
412 ; LA64-LABEL: store_f64:
413 ; LA64:       # %bb.0: # %entry
414 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_f64)
415 ; LA64-NEXT:    lu52i.d $a1, $zero, 1023
416 ; LA64-NEXT:    st.d $a1, $a0, %pc_lo12(g_f64)
417 ; LA64-NEXT:    ret
419 ; LA64-LARGE-LABEL: store_f64:
420 ; LA64-LARGE:       # %bb.0: # %entry
421 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_f64)
422 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_f64)
423 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_f64)
424 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_f64)
425 ; LA64-LARGE-NEXT:    lu52i.d $a2, $zero, 1023
426 ; LA64-LARGE-NEXT:    stx.d $a2, $a1, $a0
427 ; LA64-LARGE-NEXT:    ret
428 entry:
429   store double 1.0, ptr @g_f64
430   ret void
433 @g_m64 = dso_local global i64 0
435 define dso_local void @store_multi() nounwind {
436 ; LA32-LABEL: store_multi:
437 ; LA32:       # %bb.0: # %entry
438 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_m64)
439 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_m64)
440 ; LA32-NEXT:    st.w $zero, $a0, 4
441 ; LA32-NEXT:    ori $a1, $zero, 1
442 ; LA32-NEXT:    st.w $a1, $a0, 0
443 ; LA32-NEXT:    st.w $zero, $a0, 4
444 ; LA32-NEXT:    ori $a1, $zero, 2
445 ; LA32-NEXT:    st.w $a1, $a0, 0
446 ; LA32-NEXT:    ret
448 ; LA64-LABEL: store_multi:
449 ; LA64:       # %bb.0: # %entry
450 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_m64)
451 ; LA64-NEXT:    ori $a1, $zero, 1
452 ; LA64-NEXT:    st.d $a1, $a0, %pc_lo12(g_m64)
453 ; LA64-NEXT:    ori $a1, $zero, 2
454 ; LA64-NEXT:    st.d $a1, $a0, %pc_lo12(g_m64)
455 ; LA64-NEXT:    ret
457 ; LA64-LARGE-LABEL: store_multi:
458 ; LA64-LARGE:       # %bb.0: # %entry
459 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_m64)
460 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_m64)
461 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_m64)
462 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_m64)
463 ; LA64-LARGE-NEXT:    ori $a2, $zero, 1
464 ; LA64-LARGE-NEXT:    stx.d $a2, $a1, $a0
465 ; LA64-LARGE-NEXT:    ori $a2, $zero, 2
466 ; LA64-LARGE-NEXT:    stx.d $a2, $a1, $a0
467 ; LA64-LARGE-NEXT:    ret
468 entry:
469   store volatile i64 1, ptr @g_m64
470   store volatile i64 2, ptr @g_m64
471   ret void
474 @g_sf32 = dso_local global float 0.0
476 define dso_local void @store_sf32() nounwind {
477 ; LA32-LABEL: store_sf32:
478 ; LA32:       # %bb.0: # %entry
479 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_sf32)
480 ; LA32-NEXT:    fld.s $fa0, $a0, %pc_lo12(g_sf32)
481 ; LA32-NEXT:    fst.s $fa0, $a0, %pc_lo12(g_sf32)
482 ; LA32-NEXT:    ret
484 ; LA64-LABEL: store_sf32:
485 ; LA64:       # %bb.0: # %entry
486 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_sf32)
487 ; LA64-NEXT:    fld.s $fa0, $a0, %pc_lo12(g_sf32)
488 ; LA64-NEXT:    fst.s $fa0, $a0, %pc_lo12(g_sf32)
489 ; LA64-NEXT:    ret
491 ; LA64-LARGE-LABEL: store_sf32:
492 ; LA64-LARGE:       # %bb.0: # %entry
493 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_sf32)
494 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_sf32)
495 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_sf32)
496 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_sf32)
497 ; LA64-LARGE-NEXT:    fldx.s $fa0, $a1, $a0
498 ; LA64-LARGE-NEXT:    fstx.s $fa0, $a1, $a0
499 ; LA64-LARGE-NEXT:    ret
500 entry:
501   %0 = load float, ptr @g_sf32
502   store volatile float %0, ptr @g_sf32
503   ret void
506 @g_sf64 = dso_local global double 0.0
508 define dso_local void @store_sf64() nounwind {
509 ; LA32-LABEL: store_sf64:
510 ; LA32:       # %bb.0: # %entry
511 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_sf64)
512 ; LA32-NEXT:    fld.d $fa0, $a0, %pc_lo12(g_sf64)
513 ; LA32-NEXT:    fst.d $fa0, $a0, %pc_lo12(g_sf64)
514 ; LA32-NEXT:    ret
516 ; LA64-LABEL: store_sf64:
517 ; LA64:       # %bb.0: # %entry
518 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_sf64)
519 ; LA64-NEXT:    fld.d $fa0, $a0, %pc_lo12(g_sf64)
520 ; LA64-NEXT:    fst.d $fa0, $a0, %pc_lo12(g_sf64)
521 ; LA64-NEXT:    ret
523 ; LA64-LARGE-LABEL: store_sf64:
524 ; LA64-LARGE:       # %bb.0: # %entry
525 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_sf64)
526 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_sf64)
527 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_sf64)
528 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_sf64)
529 ; LA64-LARGE-NEXT:    fldx.d $fa0, $a1, $a0
530 ; LA64-LARGE-NEXT:    fstx.d $fa0, $a1, $a0
531 ; LA64-LARGE-NEXT:    ret
532 entry:
533   %0 = load double, ptr @g_sf64
534   store volatile double %0, ptr @g_sf64
535   ret void
538 @g_i32x4_src = dso_local global [4 x i32] zeroinitializer, align 16
539 @g_i32x4_dst = dso_local global [4 x i32] zeroinitializer, align 16
541 define dso_local void @copy_i32x4() nounwind {
542 ; LA32-LABEL: copy_i32x4:
543 ; LA32:       # %bb.0: # %entry
544 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_src)
545 ; LA32-NEXT:    vld $vr0, $a0, %pc_lo12(g_i32x4_src)
546 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_dst)
547 ; LA32-NEXT:    vst $vr0, $a0, %pc_lo12(g_i32x4_dst)
548 ; LA32-NEXT:    ret
550 ; LA64-LABEL: copy_i32x4:
551 ; LA64:       # %bb.0: # %entry
552 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_src)
553 ; LA64-NEXT:    vld $vr0, $a0, %pc_lo12(g_i32x4_src)
554 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_dst)
555 ; LA64-NEXT:    vst $vr0, $a0, %pc_lo12(g_i32x4_dst)
556 ; LA64-NEXT:    ret
558 ; LA64-LARGE-LABEL: copy_i32x4:
559 ; LA64-LARGE:       # %bb.0: # %entry
560 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_src)
561 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32x4_src)
562 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32x4_src)
563 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32x4_src)
564 ; LA64-LARGE-NEXT:    vldx $vr0, $a1, $a0
565 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_dst)
566 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32x4_dst)
567 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32x4_dst)
568 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32x4_dst)
569 ; LA64-LARGE-NEXT:    vstx $vr0, $a1, $a0
570 ; LA64-LARGE-NEXT:    ret
571 entry:
572   %0 = load <4 x i32>, ptr @g_i32x4_src, align 16
573   store <4 x i32> %0, ptr @g_i32x4_dst, align 16
574   ret void
577 @g_i32x8_src = dso_local global [8 x i32] zeroinitializer, align 32
578 @g_i32x8_dst = dso_local global [8 x i32] zeroinitializer, align 32
580 define dso_local void @copy_i32x8() nounwind {
581 ; LA32-LABEL: copy_i32x8:
582 ; LA32:       # %bb.0: # %entry
583 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_src)
584 ; LA32-NEXT:    xvld $xr0, $a0, %pc_lo12(g_i32x4_src)
585 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_dst)
586 ; LA32-NEXT:    xvst $xr0, $a0, %pc_lo12(g_i32x4_dst)
587 ; LA32-NEXT:    ret
589 ; LA64-LABEL: copy_i32x8:
590 ; LA64:       # %bb.0: # %entry
591 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_src)
592 ; LA64-NEXT:    xvld $xr0, $a0, %pc_lo12(g_i32x4_src)
593 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_dst)
594 ; LA64-NEXT:    xvst $xr0, $a0, %pc_lo12(g_i32x4_dst)
595 ; LA64-NEXT:    ret
597 ; LA64-LARGE-LABEL: copy_i32x8:
598 ; LA64-LARGE:       # %bb.0: # %entry
599 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_src)
600 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32x4_src)
601 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32x4_src)
602 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32x4_src)
603 ; LA64-LARGE-NEXT:    xvldx $xr0, $a1, $a0
604 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i32x4_dst)
605 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i32x4_dst)
606 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i32x4_dst)
607 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i32x4_dst)
608 ; LA64-LARGE-NEXT:    xvstx $xr0, $a1, $a0
609 ; LA64-LARGE-NEXT:    ret
610 entry:
611   %0 = load <8 x i32>, ptr @g_i32x4_src, align 32
612   store <8 x i32> %0, ptr @g_i32x4_dst, align 32
613   ret void
616 @g_i8x16 = dso_local global <16 x i8> zeroinitializer, align 16
618 define void @copy_i8_to_i8x16() {
619 ; LA32-LABEL: copy_i8_to_i8x16:
620 ; LA32:       # %bb.0: # %entry
621 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
622 ; LA32-NEXT:    vldrepl.b $vr0, $a0, %pc_lo12(g_i8)
623 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8x16)
624 ; LA32-NEXT:    vst $vr0, $a0, %pc_lo12(g_i8x16)
625 ; LA32-NEXT:    ret
627 ; LA64-LABEL: copy_i8_to_i8x16:
628 ; LA64:       # %bb.0: # %entry
629 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
630 ; LA64-NEXT:    vldrepl.b $vr0, $a0, %pc_lo12(g_i8)
631 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8x16)
632 ; LA64-NEXT:    vst $vr0, $a0, %pc_lo12(g_i8x16)
633 ; LA64-NEXT:    ret
635 ; LA64-LARGE-LABEL: copy_i8_to_i8x16:
636 ; LA64-LARGE:       # %bb.0: # %entry
637 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
638 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8)
639 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8)
640 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8)
641 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
642 ; LA64-LARGE-NEXT:    vldrepl.b $vr0, $a0, 0
643 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8x16)
644 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8x16)
645 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8x16)
646 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8x16)
647 ; LA64-LARGE-NEXT:    vstx $vr0, $a1, $a0
648 ; LA64-LARGE-NEXT:    ret
649 entry:
650   %0 = call <16 x i8> @llvm.loongarch.lsx.vldrepl.b(ptr @g_i8, i32 0)
651   store <16 x i8> %0, ptr @g_i8x16, align 16
652   ret void
655 @g_i8x32 = dso_local global <32 x i8> zeroinitializer, align 32
657 define void @copy_i8_to_i8x32() {
658 ; LA32-LABEL: copy_i8_to_i8x32:
659 ; LA32:       # %bb.0: # %entry
660 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
661 ; LA32-NEXT:    xvldrepl.b $xr0, $a0, %pc_lo12(g_i8)
662 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_i8x32)
663 ; LA32-NEXT:    xvst $xr0, $a0, %pc_lo12(g_i8x32)
664 ; LA32-NEXT:    ret
666 ; LA64-LABEL: copy_i8_to_i8x32:
667 ; LA64:       # %bb.0: # %entry
668 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
669 ; LA64-NEXT:    xvldrepl.b $xr0, $a0, %pc_lo12(g_i8)
670 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_i8x32)
671 ; LA64-NEXT:    xvst $xr0, $a0, %pc_lo12(g_i8x32)
672 ; LA64-NEXT:    ret
674 ; LA64-LARGE-LABEL: copy_i8_to_i8x32:
675 ; LA64-LARGE:       # %bb.0: # %entry
676 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8)
677 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8)
678 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8)
679 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8)
680 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
681 ; LA64-LARGE-NEXT:    xvldrepl.b $xr0, $a0, 0
682 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_i8x32)
683 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_i8x32)
684 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_i8x32)
685 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_i8x32)
686 ; LA64-LARGE-NEXT:    xvstx $xr0, $a1, $a0
687 ; LA64-LARGE-NEXT:    ret
688 entry:
689   %0 = call <32 x i8> @llvm.loongarch.lasx.xvldrepl.b(ptr @g_i8, i32 0)
690   store <32 x i8> %0, ptr @g_i8x32, align 32
691   ret void
694 @g_rmw = dso_local global i64 0
696 define dso_local void @rmw() nounwind {
697 ; LA32-LABEL: rmw:
698 ; LA32:       # %bb.0: # %entry
699 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_rmw)
700 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_rmw)
701 ; LA32-NEXT:    ld.w $a1, $a0, 0
702 ; LA32-NEXT:    ld.w $a2, $a0, 4
703 ; LA32-NEXT:    addi.w $a1, $a1, 1
704 ; LA32-NEXT:    sltui $a3, $a1, 1
705 ; LA32-NEXT:    add.w $a2, $a2, $a3
706 ; LA32-NEXT:    st.w $a1, $a0, 0
707 ; LA32-NEXT:    st.w $a2, $a0, 4
708 ; LA32-NEXT:    ret
710 ; LA64-LABEL: rmw:
711 ; LA64:       # %bb.0: # %entry
712 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_rmw)
713 ; LA64-NEXT:    ld.d $a1, $a0, %pc_lo12(g_rmw)
714 ; LA64-NEXT:    addi.d $a1, $a1, 1
715 ; LA64-NEXT:    st.d $a1, $a0, %pc_lo12(g_rmw)
716 ; LA64-NEXT:    ret
718 ; LA64-LARGE-LABEL: rmw:
719 ; LA64-LARGE:       # %bb.0: # %entry
720 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_rmw)
721 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_rmw)
722 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_rmw)
723 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_rmw)
724 ; LA64-LARGE-NEXT:    ldx.d $a2, $a1, $a0
725 ; LA64-LARGE-NEXT:    addi.d $a2, $a2, 1
726 ; LA64-LARGE-NEXT:    stx.d $a2, $a1, $a0
727 ; LA64-LARGE-NEXT:    ret
728 entry:
729   %0 = load i64, ptr @g_rmw
730   %1 = add i64 %0, 1
731   store i64 %1, ptr @g_rmw
732   ret void
735 @g_a32 = dso_local global [2048 x i32] zeroinitializer, align 4
737 define dso_local void @store_a32() nounwind {
738 ; LA32-LABEL: store_a32:
739 ; LA32:       # %bb.0: # %entry
740 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4096)
741 ; LA32-NEXT:    ori $a1, $zero, 1
742 ; LA32-NEXT:    st.w $a1, $a0, %pc_lo12(g_a32+4096)
743 ; LA32-NEXT:    ret
745 ; LA64-LABEL: store_a32:
746 ; LA64:       # %bb.0: # %entry
747 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4096)
748 ; LA64-NEXT:    ori $a1, $zero, 1
749 ; LA64-NEXT:    st.w $a1, $a0, %pc_lo12(g_a32+4096)
750 ; LA64-NEXT:    ret
752 ; LA64-LARGE-LABEL: store_a32:
753 ; LA64-LARGE:       # %bb.0: # %entry
754 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4096)
755 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a32+4096)
756 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a32+4096)
757 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a32+4096)
758 ; LA64-LARGE-NEXT:    ori $a2, $zero, 1
759 ; LA64-LARGE-NEXT:    stx.w $a2, $a1, $a0
760 ; LA64-LARGE-NEXT:    ret
761 entry:
762   store i32 1, ptr getelementptr inbounds ([1 x i32], ptr @g_a32, i32 1024), align 4
763   ret void
766 define dso_local void @store_a32_2() nounwind {
767 ; LA32-LABEL: store_a32_2:
768 ; LA32:       # %bb.0: # %entry
769 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a32)
770 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a32)
771 ; LA32-NEXT:    lu12i.w $a1, 1
772 ; LA32-NEXT:    add.w $a2, $a0, $a1
773 ; LA32-NEXT:    ori $a3, $zero, 1
774 ; LA32-NEXT:    st.w $a3, $a2, 0
775 ; LA32-NEXT:    ori $a1, $a1, 8
776 ; LA32-NEXT:    add.w $a0, $a0, $a1
777 ; LA32-NEXT:    ori $a1, $zero, 2
778 ; LA32-NEXT:    st.w $a1, $a0, 0
779 ; LA32-NEXT:    ret
781 ; LA64-LABEL: store_a32_2:
782 ; LA64:       # %bb.0: # %entry
783 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a32)
784 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a32)
785 ; LA64-NEXT:    ori $a1, $zero, 1
786 ; LA64-NEXT:    stptr.w $a1, $a0, 4096
787 ; LA64-NEXT:    ori $a1, $zero, 2
788 ; LA64-NEXT:    stptr.w $a1, $a0, 4104
789 ; LA64-NEXT:    ret
791 ; LA64-LARGE-LABEL: store_a32_2:
792 ; LA64-LARGE:       # %bb.0: # %entry
793 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a32)
794 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a32)
795 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a32)
796 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a32)
797 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
798 ; LA64-LARGE-NEXT:    ori $a1, $zero, 1
799 ; LA64-LARGE-NEXT:    stptr.w $a1, $a0, 4096
800 ; LA64-LARGE-NEXT:    ori $a1, $zero, 2
801 ; LA64-LARGE-NEXT:    stptr.w $a1, $a0, 4104
802 ; LA64-LARGE-NEXT:    ret
803 entry:
804   store i32 1, ptr getelementptr inbounds ([1 x i32], ptr @g_a32, i32 1024), align 4
805   store i32 2, ptr getelementptr inbounds ([1 x i32], ptr @g_a32, i32 1026), align 4
806   ret void
809 define dso_local void @control_flow_with_mem_access() nounwind {
810 ; LA32-LABEL: control_flow_with_mem_access:
811 ; LA32:       # %bb.0: # %entry
812 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4)
813 ; LA32-NEXT:    ld.w $a1, $a0, %pc_lo12(g_a32+4)
814 ; LA32-NEXT:    ori $a2, $zero, 1
815 ; LA32-NEXT:    blt $a1, $a2, .LBB25_2
816 ; LA32-NEXT:  # %bb.1: # %if.then
817 ; LA32-NEXT:    ori $a1, $zero, 10
818 ; LA32-NEXT:    st.w $a1, $a0, %pc_lo12(g_a32+4)
819 ; LA32-NEXT:  .LBB25_2: # %if.end
820 ; LA32-NEXT:    ret
822 ; LA64-LABEL: control_flow_with_mem_access:
823 ; LA64:       # %bb.0: # %entry
824 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4)
825 ; LA64-NEXT:    ld.w $a1, $a0, %pc_lo12(g_a32+4)
826 ; LA64-NEXT:    ori $a2, $zero, 1
827 ; LA64-NEXT:    blt $a1, $a2, .LBB25_2
828 ; LA64-NEXT:  # %bb.1: # %if.then
829 ; LA64-NEXT:    ori $a1, $zero, 10
830 ; LA64-NEXT:    st.w $a1, $a0, %pc_lo12(g_a32+4)
831 ; LA64-NEXT:  .LBB25_2: # %if.end
832 ; LA64-NEXT:    ret
834 ; LA64-LARGE-LABEL: control_flow_with_mem_access:
835 ; LA64-LARGE:       # %bb.0: # %entry
836 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4)
837 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a32+4)
838 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a32+4)
839 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a32+4)
840 ; LA64-LARGE-NEXT:    ldx.w $a0, $a1, $a0
841 ; LA64-LARGE-NEXT:    ori $a1, $zero, 1
842 ; LA64-LARGE-NEXT:    blt $a0, $a1, .LBB25_2
843 ; LA64-LARGE-NEXT:  # %bb.1: # %if.then
844 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a32+4)
845 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a32+4)
846 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a32+4)
847 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a32+4)
848 ; LA64-LARGE-NEXT:    ori $a2, $zero, 10
849 ; LA64-LARGE-NEXT:    stx.w $a2, $a1, $a0
850 ; LA64-LARGE-NEXT:  .LBB25_2: # %if.end
851 ; LA64-LARGE-NEXT:    ret
852 entry:
853   %0 = load i32, ptr getelementptr inbounds ([1 x i32], ptr @g_a32, i32 1), align 4
854   %cmp = icmp sgt i32 %0, 0
855   br i1 %cmp, label %if.then, label %if.end
857 if.then:
858   store i32 10, ptr getelementptr inbounds ([1 x i32], ptr @g_a32, i32 1), align 4
859   br label %if.end
861 if.end:
862   ret void
865 define dso_local ptr @load_ba_1() nounwind {
866 ; LA32-LABEL: load_ba_1:
867 ; LA32:       # %bb.0: # %entry
868 ; LA32-NEXT:  .Ltmp0: # Block address taken
869 ; LA32-NEXT:  # %bb.1: # %label
870 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.Ltmp0)
871 ; LA32-NEXT:    ld.w $a0, $a0, %pc_lo12(.Ltmp0)
872 ; LA32-NEXT:    ret
874 ; LA64-LABEL: load_ba_1:
875 ; LA64:       # %bb.0: # %entry
876 ; LA64-NEXT:  .Ltmp0: # Block address taken
877 ; LA64-NEXT:  # %bb.1: # %label
878 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.Ltmp0)
879 ; LA64-NEXT:    ld.d $a0, $a0, %pc_lo12(.Ltmp0)
880 ; LA64-NEXT:    ret
882 ; LA64-LARGE-LABEL: load_ba_1:
883 ; LA64-LARGE:       # %bb.0: # %entry
884 ; LA64-LARGE-NEXT:  .Ltmp0: # Block address taken
885 ; LA64-LARGE-NEXT:  # %bb.1: # %label
886 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(.Ltmp0)
887 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(.Ltmp0)
888 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(.Ltmp0)
889 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(.Ltmp0)
890 ; LA64-LARGE-NEXT:    ldx.d $a0, $a1, $a0
891 ; LA64-LARGE-NEXT:    ret
892 entry:
893   br label %label
894 label:
895   %0 = load ptr, ptr blockaddress(@load_ba_1, %label)
896   ret ptr %0
899 define dso_local ptr @load_ba_2() nounwind {
900 ; LA32-LABEL: load_ba_2:
901 ; LA32:       # %bb.0: # %entry
902 ; LA32-NEXT:  .Ltmp1: # Block address taken
903 ; LA32-NEXT:  # %bb.1: # %label
904 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(.Ltmp1+8)
905 ; LA32-NEXT:    ld.w $a0, $a0, %pc_lo12(.Ltmp1+8)
906 ; LA32-NEXT:    ret
908 ; LA64-LABEL: load_ba_2:
909 ; LA64:       # %bb.0: # %entry
910 ; LA64-NEXT:  .Ltmp1: # Block address taken
911 ; LA64-NEXT:  # %bb.1: # %label
912 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(.Ltmp1+8)
913 ; LA64-NEXT:    ld.d $a0, $a0, %pc_lo12(.Ltmp1+8)
914 ; LA64-NEXT:    ret
916 ; LA64-LARGE-LABEL: load_ba_2:
917 ; LA64-LARGE:       # %bb.0: # %entry
918 ; LA64-LARGE-NEXT:  .Ltmp1: # Block address taken
919 ; LA64-LARGE-NEXT:  # %bb.1: # %label
920 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(.Ltmp1+8)
921 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(.Ltmp1+8)
922 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(.Ltmp1+8)
923 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(.Ltmp1+8)
924 ; LA64-LARGE-NEXT:    ldx.d $a0, $a1, $a0
925 ; LA64-LARGE-NEXT:    ret
926 entry:
927   br label %label
928 label:
929   %0 = load ptr, ptr getelementptr inbounds (i8, ptr blockaddress(@load_ba_2, %label), i32 8)
930   ret ptr %0
933 @g_a64 = dso_local global [614750729487779976 x i64] zeroinitializer, align 8
935 define dso_local ptr @load_addr_offset_1() nounwind {
936 ; LA32-LABEL: load_addr_offset_1:
937 ; LA32:       # %bb.0: # %entry
938 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8)
939 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+8)
940 ; LA32-NEXT:    ret
942 ; LA64-LABEL: load_addr_offset_1:
943 ; LA64:       # %bb.0: # %entry
944 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8)
945 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64+8)
946 ; LA64-NEXT:    ret
948 ; LA64-LARGE-LABEL: load_addr_offset_1:
949 ; LA64-LARGE:       # %bb.0: # %entry
950 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8)
951 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+8)
952 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+8)
953 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+8)
954 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
955 ; LA64-LARGE-NEXT:    ret
956 entry:
957   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 1)
960 define dso_local ptr @load_addr_offset_257() nounwind {
961 ; LA32-LABEL: load_addr_offset_257:
962 ; LA32:       # %bb.0: # %entry
963 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2056)
964 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+2056)
965 ; LA32-NEXT:    ret
967 ; LA64-LABEL: load_addr_offset_257:
968 ; LA64:       # %bb.0: # %entry
969 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2056)
970 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64+2056)
971 ; LA64-NEXT:    ret
973 ; LA64-LARGE-LABEL: load_addr_offset_257:
974 ; LA64-LARGE:       # %bb.0: # %entry
975 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2056)
976 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+2056)
977 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+2056)
978 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+2056)
979 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
980 ; LA64-LARGE-NEXT:    ret
981 entry:
982   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 257)
985 define dso_local ptr @load_addr_offset_1048576() nounwind {
986 ; LA32-LABEL: load_addr_offset_1048576:
987 ; LA32:       # %bb.0: # %entry
988 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8388608)
989 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+8388608)
990 ; LA32-NEXT:    ret
992 ; LA64-LABEL: load_addr_offset_1048576:
993 ; LA64:       # %bb.0: # %entry
994 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8388608)
995 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64+8388608)
996 ; LA64-NEXT:    ret
998 ; LA64-LARGE-LABEL: load_addr_offset_1048576:
999 ; LA64-LARGE:       # %bb.0: # %entry
1000 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8388608)
1001 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+8388608)
1002 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+8388608)
1003 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+8388608)
1004 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1005 ; LA64-LARGE-NEXT:    ret
1006 entry:
1007   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 1048576)
1010 define dso_local ptr @load_addr_offset_1048577() nounwind {
1011 ; LA32-LABEL: load_addr_offset_1048577:
1012 ; LA32:       # %bb.0: # %entry
1013 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8388616)
1014 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+8388616)
1015 ; LA32-NEXT:    ret
1017 ; LA64-LABEL: load_addr_offset_1048577:
1018 ; LA64:       # %bb.0: # %entry
1019 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8388616)
1020 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64+8388616)
1021 ; LA64-NEXT:    ret
1023 ; LA64-LARGE-LABEL: load_addr_offset_1048577:
1024 ; LA64-LARGE:       # %bb.0: # %entry
1025 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+8388616)
1026 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+8388616)
1027 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+8388616)
1028 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+8388616)
1029 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1030 ; LA64-LARGE-NEXT:    ret
1031 entry:
1032   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 1048577)
1035 define dso_local ptr @load_addr_offset_268432896() nounwind {
1036 ; LA32-LABEL: load_addr_offset_268432896:
1037 ; LA32:       # %bb.0: # %entry
1038 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2147463168)
1039 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+2147463168)
1040 ; LA32-NEXT:    ret
1042 ; LA64-LABEL: load_addr_offset_268432896:
1043 ; LA64:       # %bb.0: # %entry
1044 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2147463168)
1045 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64+2147463168)
1046 ; LA64-NEXT:    ret
1048 ; LA64-LARGE-LABEL: load_addr_offset_268432896:
1049 ; LA64-LARGE:       # %bb.0: # %entry
1050 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2147463168)
1051 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+2147463168)
1052 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+2147463168)
1053 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+2147463168)
1054 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1055 ; LA64-LARGE-NEXT:    ret
1056 entry:
1057   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 268432896)
1060 define dso_local ptr @load_addr_offset_268432897() nounwind {
1061 ; LA32-LABEL: load_addr_offset_268432897:
1062 ; LA32:       # %bb.0: # %entry
1063 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2147463176)
1064 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+2147463176)
1065 ; LA32-NEXT:    ret
1067 ; LA64-LABEL: load_addr_offset_268432897:
1068 ; LA64:       # %bb.0: # %entry
1069 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2147463176)
1070 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64+2147463176)
1071 ; LA64-NEXT:    ret
1073 ; LA64-LARGE-LABEL: load_addr_offset_268432897:
1074 ; LA64-LARGE:       # %bb.0: # %entry
1075 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2147463176)
1076 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+2147463176)
1077 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+2147463176)
1078 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+2147463176)
1079 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1080 ; LA64-LARGE-NEXT:    ret
1081 entry:
1082   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 268432897)
1085 define dso_local ptr @load_addr_offset_281474439839744() nounwind {
1086 ; LA32-LABEL: load_addr_offset_281474439839744:
1087 ; LA32:       # %bb.0: # %entry
1088 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1089 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64)
1090 ; LA32-NEXT:    ret
1092 ; LA64-LABEL: load_addr_offset_281474439839744:
1093 ; LA64:       # %bb.0: # %entry
1094 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1095 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64)
1096 ; LA64-NEXT:    ori $a1, $zero, 0
1097 ; LA64-NEXT:    lu32i.d $a1, 524287
1098 ; LA64-NEXT:    add.d $a0, $a0, $a1
1099 ; LA64-NEXT:    ret
1101 ; LA64-LARGE-LABEL: load_addr_offset_281474439839744:
1102 ; LA64-LARGE:       # %bb.0: # %entry
1103 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2251795518717952)
1104 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+2251795518717952)
1105 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+2251795518717952)
1106 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+2251795518717952)
1107 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1108 ; LA64-LARGE-NEXT:    ret
1109 entry:
1110   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 281474439839744)
1113 define dso_local ptr @load_addr_offset_248792680471040() nounwind {
1114 ; LA32-LABEL: load_addr_offset_248792680471040:
1115 ; LA32:       # %bb.0: # %entry
1116 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+2059194368)
1117 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+2059194368)
1118 ; LA32-NEXT:    ret
1120 ; LA64-LABEL: load_addr_offset_248792680471040:
1121 ; LA64:       # %bb.0: # %entry
1122 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1123 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64)
1124 ; LA64-NEXT:    lu12i.w $a1, 502733
1125 ; LA64-NEXT:    lu32i.d $a1, 463412
1126 ; LA64-NEXT:    add.d $a0, $a0, $a1
1127 ; LA64-NEXT:    ret
1129 ; LA64-LARGE-LABEL: load_addr_offset_248792680471040:
1130 ; LA64-LARGE:       # %bb.0: # %entry
1131 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+1990341443768320)
1132 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+1990341443768320)
1133 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+1990341443768320)
1134 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+1990341443768320)
1135 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1136 ; LA64-LARGE-NEXT:    ret
1137 entry:
1138   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 248792680471040)
1141 define dso_local ptr @load_addr_offset_9380351707272() nounwind {
1142 ; LA32-LABEL: load_addr_offset_9380351707272:
1143 ; LA32:       # %bb.0: # %entry
1144 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+1145062464)
1145 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+1145062464)
1146 ; LA32-NEXT:    ret
1148 ; LA64-LABEL: load_addr_offset_9380351707272:
1149 ; LA64:       # %bb.0: # %entry
1150 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1151 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64)
1152 ; LA64-NEXT:    lu12i.w $a1, 279556
1153 ; LA64-NEXT:    ori $a1, $a1, 1088
1154 ; LA64-NEXT:    lu32i.d $a1, 17472
1155 ; LA64-NEXT:    add.d $a0, $a0, $a1
1156 ; LA64-NEXT:    ret
1158 ; LA64-LARGE-LABEL: load_addr_offset_9380351707272:
1159 ; LA64-LARGE:       # %bb.0: # %entry
1160 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+75042813658176)
1161 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+75042813658176)
1162 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+75042813658176)
1163 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+75042813658176)
1164 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1165 ; LA64-LARGE-NEXT:    ret
1166 entry:
1167   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 9380351707272)
1170 define dso_local ptr @load_addr_offset_562949953421312() nounwind {
1171 ; LA32-LABEL: load_addr_offset_562949953421312:
1172 ; LA32:       # %bb.0: # %entry
1173 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1174 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64)
1175 ; LA32-NEXT:    ret
1177 ; LA64-LABEL: load_addr_offset_562949953421312:
1178 ; LA64:       # %bb.0: # %entry
1179 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1180 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64)
1181 ; LA64-NEXT:    lu52i.d $a1, $zero, 1
1182 ; LA64-NEXT:    add.d $a0, $a0, $a1
1183 ; LA64-NEXT:    ret
1185 ; LA64-LARGE-LABEL: load_addr_offset_562949953421312:
1186 ; LA64-LARGE:       # %bb.0: # %entry
1187 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+4503599627370496)
1188 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+4503599627370496)
1189 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+4503599627370496)
1190 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+4503599627370496)
1191 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1192 ; LA64-LARGE-NEXT:    ret
1193 entry:
1194   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 562949953421312)
1197 define dso_local ptr @load_addr_offset_614749556925924693() nounwind {
1198 ; LA32-LABEL: load_addr_offset_614749556925924693:
1199 ; LA32:       # %bb.0: # %entry
1200 ; LA32-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+858794664)
1201 ; LA32-NEXT:    addi.w $a0, $a0, %pc_lo12(g_a64+858794664)
1202 ; LA32-NEXT:    ret
1204 ; LA64-LABEL: load_addr_offset_614749556925924693:
1205 ; LA64:       # %bb.0: # %entry
1206 ; LA64-NEXT:    pcalau12i $a0, %pc_hi20(g_a64)
1207 ; LA64-NEXT:    addi.d $a0, $a0, %pc_lo12(g_a64)
1208 ; LA64-NEXT:    lu12i.w $a1, 209666
1209 ; LA64-NEXT:    ori $a1, $a1, 2728
1210 ; LA64-NEXT:    lu32i.d $a1, 15288
1211 ; LA64-NEXT:    lu52i.d $a1, $a1, 1092
1212 ; LA64-NEXT:    add.d $a0, $a0, $a1
1213 ; LA64-NEXT:    ret
1215 ; LA64-LARGE-LABEL: load_addr_offset_614749556925924693:
1216 ; LA64-LARGE:       # %bb.0: # %entry
1217 ; LA64-LARGE-NEXT:    pcalau12i $a0, %pc_hi20(g_a64+4917996455407397544)
1218 ; LA64-LARGE-NEXT:    addi.d $a1, $zero, %pc_lo12(g_a64+4917996455407397544)
1219 ; LA64-LARGE-NEXT:    lu32i.d $a1, %pc64_lo20(g_a64+4917996455407397544)
1220 ; LA64-LARGE-NEXT:    lu52i.d $a1, $a1, %pc64_hi12(g_a64+4917996455407397544)
1221 ; LA64-LARGE-NEXT:    add.d $a0, $a1, $a0
1222 ; LA64-LARGE-NEXT:    ret
1223 entry:
1224   ret ptr getelementptr inbounds ([1 x i64], ptr @g_a64, i64 614749556925924693)