xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomic-load-lse2.ll (revision 465bc5e729fd755880b9a288de42a37ad1206301)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld|st[^r]|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"
2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py
3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2 -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2 -O1 | FileCheck %s --check-prefixes=CHECK,-O1
5
6define dso_local i8 @load_atomic_i8_aligned_unordered(ptr %ptr) {
7; CHECK-LABEL: load_atomic_i8_aligned_unordered:
8; CHECK:    ldrb w0, [x0]
9    %r = load atomic i8, ptr %ptr unordered, align 1
10    ret i8 %r
11}
12
13define dso_local i8 @load_atomic_i8_aligned_unordered_const(ptr readonly %ptr) {
14; CHECK-LABEL: load_atomic_i8_aligned_unordered_const:
15; CHECK:    ldrb w0, [x0]
16    %r = load atomic i8, ptr %ptr unordered, align 1
17    ret i8 %r
18}
19
20define dso_local i8 @load_atomic_i8_aligned_monotonic(ptr %ptr) {
21; CHECK-LABEL: load_atomic_i8_aligned_monotonic:
22; CHECK:    ldrb w0, [x0]
23    %r = load atomic i8, ptr %ptr monotonic, align 1
24    ret i8 %r
25}
26
27define dso_local i8 @load_atomic_i8_aligned_monotonic_const(ptr readonly %ptr) {
28; CHECK-LABEL: load_atomic_i8_aligned_monotonic_const:
29; CHECK:    ldrb w0, [x0]
30    %r = load atomic i8, ptr %ptr monotonic, align 1
31    ret i8 %r
32}
33
34define dso_local i8 @load_atomic_i8_aligned_acquire(ptr %ptr) {
35; CHECK-LABEL: load_atomic_i8_aligned_acquire:
36; CHECK:    ldarb w0, [x0]
37    %r = load atomic i8, ptr %ptr acquire, align 1
38    ret i8 %r
39}
40
41define dso_local i8 @load_atomic_i8_aligned_acquire_const(ptr readonly %ptr) {
42; CHECK-LABEL: load_atomic_i8_aligned_acquire_const:
43; CHECK:    ldarb w0, [x0]
44    %r = load atomic i8, ptr %ptr acquire, align 1
45    ret i8 %r
46}
47
48define dso_local i8 @load_atomic_i8_aligned_seq_cst(ptr %ptr) {
49; CHECK-LABEL: load_atomic_i8_aligned_seq_cst:
50; CHECK:    ldarb w0, [x0]
51    %r = load atomic i8, ptr %ptr seq_cst, align 1
52    ret i8 %r
53}
54
55define dso_local i8 @load_atomic_i8_aligned_seq_cst_const(ptr readonly %ptr) {
56; CHECK-LABEL: load_atomic_i8_aligned_seq_cst_const:
57; CHECK:    ldarb w0, [x0]
58    %r = load atomic i8, ptr %ptr seq_cst, align 1
59    ret i8 %r
60}
61
62define dso_local i16 @load_atomic_i16_aligned_unordered(ptr %ptr) {
63; CHECK-LABEL: load_atomic_i16_aligned_unordered:
64; CHECK:    ldrh w0, [x0]
65    %r = load atomic i16, ptr %ptr unordered, align 2
66    ret i16 %r
67}
68
69define dso_local i16 @load_atomic_i16_aligned_unordered_const(ptr readonly %ptr) {
70; CHECK-LABEL: load_atomic_i16_aligned_unordered_const:
71; CHECK:    ldrh w0, [x0]
72    %r = load atomic i16, ptr %ptr unordered, align 2
73    ret i16 %r
74}
75
76define dso_local i16 @load_atomic_i16_aligned_monotonic(ptr %ptr) {
77; CHECK-LABEL: load_atomic_i16_aligned_monotonic:
78; CHECK:    ldrh w0, [x0]
79    %r = load atomic i16, ptr %ptr monotonic, align 2
80    ret i16 %r
81}
82
83define dso_local i16 @load_atomic_i16_aligned_monotonic_const(ptr readonly %ptr) {
84; CHECK-LABEL: load_atomic_i16_aligned_monotonic_const:
85; CHECK:    ldrh w0, [x0]
86    %r = load atomic i16, ptr %ptr monotonic, align 2
87    ret i16 %r
88}
89
90define dso_local i16 @load_atomic_i16_aligned_acquire(ptr %ptr) {
91; CHECK-LABEL: load_atomic_i16_aligned_acquire:
92; CHECK:    ldarh w0, [x0]
93    %r = load atomic i16, ptr %ptr acquire, align 2
94    ret i16 %r
95}
96
97define dso_local i16 @load_atomic_i16_aligned_acquire_const(ptr readonly %ptr) {
98; CHECK-LABEL: load_atomic_i16_aligned_acquire_const:
99; CHECK:    ldarh w0, [x0]
100    %r = load atomic i16, ptr %ptr acquire, align 2
101    ret i16 %r
102}
103
104define dso_local i16 @load_atomic_i16_aligned_seq_cst(ptr %ptr) {
105; CHECK-LABEL: load_atomic_i16_aligned_seq_cst:
106; CHECK:    ldarh w0, [x0]
107    %r = load atomic i16, ptr %ptr seq_cst, align 2
108    ret i16 %r
109}
110
111define dso_local i16 @load_atomic_i16_aligned_seq_cst_const(ptr readonly %ptr) {
112; CHECK-LABEL: load_atomic_i16_aligned_seq_cst_const:
113; CHECK:    ldarh w0, [x0]
114    %r = load atomic i16, ptr %ptr seq_cst, align 2
115    ret i16 %r
116}
117
118define dso_local i32 @load_atomic_i32_aligned_unordered(ptr %ptr) {
119; CHECK-LABEL: load_atomic_i32_aligned_unordered:
120; CHECK:    ldr w0, [x0]
121    %r = load atomic i32, ptr %ptr unordered, align 4
122    ret i32 %r
123}
124
125define dso_local i32 @load_atomic_i32_aligned_unordered_const(ptr readonly %ptr) {
126; CHECK-LABEL: load_atomic_i32_aligned_unordered_const:
127; CHECK:    ldr w0, [x0]
128    %r = load atomic i32, ptr %ptr unordered, align 4
129    ret i32 %r
130}
131
132define dso_local i32 @load_atomic_i32_aligned_monotonic(ptr %ptr) {
133; CHECK-LABEL: load_atomic_i32_aligned_monotonic:
134; CHECK:    ldr w0, [x0]
135    %r = load atomic i32, ptr %ptr monotonic, align 4
136    ret i32 %r
137}
138
139define dso_local i32 @load_atomic_i32_aligned_monotonic_const(ptr readonly %ptr) {
140; CHECK-LABEL: load_atomic_i32_aligned_monotonic_const:
141; CHECK:    ldr w0, [x0]
142    %r = load atomic i32, ptr %ptr monotonic, align 4
143    ret i32 %r
144}
145
146define dso_local i32 @load_atomic_i32_aligned_acquire(ptr %ptr) {
147; CHECK-LABEL: load_atomic_i32_aligned_acquire:
148; CHECK:    ldar w0, [x0]
149    %r = load atomic i32, ptr %ptr acquire, align 4
150    ret i32 %r
151}
152
153define dso_local i32 @load_atomic_i32_aligned_acquire_const(ptr readonly %ptr) {
154; CHECK-LABEL: load_atomic_i32_aligned_acquire_const:
155; CHECK:    ldar w0, [x0]
156    %r = load atomic i32, ptr %ptr acquire, align 4
157    ret i32 %r
158}
159
160define dso_local i32 @load_atomic_i32_aligned_seq_cst(ptr %ptr) {
161; CHECK-LABEL: load_atomic_i32_aligned_seq_cst:
162; CHECK:    ldar w0, [x0]
163    %r = load atomic i32, ptr %ptr seq_cst, align 4
164    ret i32 %r
165}
166
167define dso_local i32 @load_atomic_i32_aligned_seq_cst_const(ptr readonly %ptr) {
168; CHECK-LABEL: load_atomic_i32_aligned_seq_cst_const:
169; CHECK:    ldar w0, [x0]
170    %r = load atomic i32, ptr %ptr seq_cst, align 4
171    ret i32 %r
172}
173
174define dso_local i64 @load_atomic_i64_aligned_unordered(ptr %ptr) {
175; CHECK-LABEL: load_atomic_i64_aligned_unordered:
176; CHECK:    ldr x0, [x0]
177    %r = load atomic i64, ptr %ptr unordered, align 8
178    ret i64 %r
179}
180
181define dso_local i64 @load_atomic_i64_aligned_unordered_const(ptr readonly %ptr) {
182; CHECK-LABEL: load_atomic_i64_aligned_unordered_const:
183; CHECK:    ldr x0, [x0]
184    %r = load atomic i64, ptr %ptr unordered, align 8
185    ret i64 %r
186}
187
188define dso_local i64 @load_atomic_i64_aligned_monotonic(ptr %ptr) {
189; CHECK-LABEL: load_atomic_i64_aligned_monotonic:
190; CHECK:    ldr x0, [x0]
191    %r = load atomic i64, ptr %ptr monotonic, align 8
192    ret i64 %r
193}
194
195define dso_local i64 @load_atomic_i64_aligned_monotonic_const(ptr readonly %ptr) {
196; CHECK-LABEL: load_atomic_i64_aligned_monotonic_const:
197; CHECK:    ldr x0, [x0]
198    %r = load atomic i64, ptr %ptr monotonic, align 8
199    ret i64 %r
200}
201
202define dso_local i64 @load_atomic_i64_aligned_acquire(ptr %ptr) {
203; CHECK-LABEL: load_atomic_i64_aligned_acquire:
204; CHECK:    ldar x0, [x0]
205    %r = load atomic i64, ptr %ptr acquire, align 8
206    ret i64 %r
207}
208
209define dso_local i64 @load_atomic_i64_aligned_acquire_const(ptr readonly %ptr) {
210; CHECK-LABEL: load_atomic_i64_aligned_acquire_const:
211; CHECK:    ldar x0, [x0]
212    %r = load atomic i64, ptr %ptr acquire, align 8
213    ret i64 %r
214}
215
216define dso_local i64 @load_atomic_i64_aligned_seq_cst(ptr %ptr) {
217; CHECK-LABEL: load_atomic_i64_aligned_seq_cst:
218; CHECK:    ldar x0, [x0]
219    %r = load atomic i64, ptr %ptr seq_cst, align 8
220    ret i64 %r
221}
222
223define dso_local i64 @load_atomic_i64_aligned_seq_cst_const(ptr readonly %ptr) {
224; CHECK-LABEL: load_atomic_i64_aligned_seq_cst_const:
225; CHECK:    ldar x0, [x0]
226    %r = load atomic i64, ptr %ptr seq_cst, align 8
227    ret i64 %r
228}
229
230define dso_local i128 @load_atomic_i128_aligned_unordered(ptr %ptr) {
231; CHECK-LABEL: load_atomic_i128_aligned_unordered:
232; CHECK:    ldp x0, x1, [x0]
233    %r = load atomic i128, ptr %ptr unordered, align 16
234    ret i128 %r
235}
236
237define dso_local i128 @load_atomic_i128_aligned_unordered_const(ptr readonly %ptr) {
238; CHECK-LABEL: load_atomic_i128_aligned_unordered_const:
239; CHECK:    ldp x0, x1, [x0]
240    %r = load atomic i128, ptr %ptr unordered, align 16
241    ret i128 %r
242}
243
244define dso_local i128 @load_atomic_i128_aligned_monotonic(ptr %ptr) {
245; CHECK-LABEL: load_atomic_i128_aligned_monotonic:
246; CHECK:    ldp x0, x1, [x0]
247    %r = load atomic i128, ptr %ptr monotonic, align 16
248    ret i128 %r
249}
250
251define dso_local i128 @load_atomic_i128_aligned_monotonic_const(ptr readonly %ptr) {
252; CHECK-LABEL: load_atomic_i128_aligned_monotonic_const:
253; CHECK:    ldp x0, x1, [x0]
254    %r = load atomic i128, ptr %ptr monotonic, align 16
255    ret i128 %r
256}
257
258define dso_local i128 @load_atomic_i128_aligned_acquire(ptr %ptr) {
259; CHECK-LABEL: load_atomic_i128_aligned_acquire:
260; CHECK:    ldp x0, x1, [x0]
261; CHECK:    dmb ishld
262    %r = load atomic i128, ptr %ptr acquire, align 16
263    ret i128 %r
264}
265
266define dso_local i128 @load_atomic_i128_aligned_acquire_const(ptr readonly %ptr) {
267; CHECK-LABEL: load_atomic_i128_aligned_acquire_const:
268; CHECK:    ldp x0, x1, [x0]
269; CHECK:    dmb ishld
270    %r = load atomic i128, ptr %ptr acquire, align 16
271    ret i128 %r
272}
273
274define dso_local i128 @load_atomic_i128_aligned_seq_cst(ptr %ptr) {
275; CHECK-LABEL: load_atomic_i128_aligned_seq_cst:
276; CHECK:    ldp x0, x1, [x0]
277; CHECK:    dmb ish
278    %r = load atomic i128, ptr %ptr seq_cst, align 16
279    ret i128 %r
280}
281
282define dso_local i128 @load_atomic_i128_aligned_seq_cst_const(ptr readonly %ptr) {
283; CHECK-LABEL: load_atomic_i128_aligned_seq_cst_const:
284; CHECK:    ldp x0, x1, [x0]
285; CHECK:    dmb ish
286    %r = load atomic i128, ptr %ptr seq_cst, align 16
287    ret i128 %r
288}
289
290define dso_local i8 @load_atomic_i8_unaligned_unordered(ptr %ptr) {
291; CHECK-LABEL: load_atomic_i8_unaligned_unordered:
292; CHECK:    ldrb w0, [x0]
293    %r = load atomic i8, ptr %ptr unordered, align 1
294    ret i8 %r
295}
296
297define dso_local i8 @load_atomic_i8_unaligned_unordered_const(ptr readonly %ptr) {
298; CHECK-LABEL: load_atomic_i8_unaligned_unordered_const:
299; CHECK:    ldrb w0, [x0]
300    %r = load atomic i8, ptr %ptr unordered, align 1
301    ret i8 %r
302}
303
304define dso_local i8 @load_atomic_i8_unaligned_monotonic(ptr %ptr) {
305; CHECK-LABEL: load_atomic_i8_unaligned_monotonic:
306; CHECK:    ldrb w0, [x0]
307    %r = load atomic i8, ptr %ptr monotonic, align 1
308    ret i8 %r
309}
310
311define dso_local i8 @load_atomic_i8_unaligned_monotonic_const(ptr readonly %ptr) {
312; CHECK-LABEL: load_atomic_i8_unaligned_monotonic_const:
313; CHECK:    ldrb w0, [x0]
314    %r = load atomic i8, ptr %ptr monotonic, align 1
315    ret i8 %r
316}
317
318define dso_local i8 @load_atomic_i8_unaligned_acquire(ptr %ptr) {
319; CHECK-LABEL: load_atomic_i8_unaligned_acquire:
320; CHECK:    ldarb w0, [x0]
321    %r = load atomic i8, ptr %ptr acquire, align 1
322    ret i8 %r
323}
324
325define dso_local i8 @load_atomic_i8_unaligned_acquire_const(ptr readonly %ptr) {
326; CHECK-LABEL: load_atomic_i8_unaligned_acquire_const:
327; CHECK:    ldarb w0, [x0]
328    %r = load atomic i8, ptr %ptr acquire, align 1
329    ret i8 %r
330}
331
332define dso_local i8 @load_atomic_i8_unaligned_seq_cst(ptr %ptr) {
333; CHECK-LABEL: load_atomic_i8_unaligned_seq_cst:
334; CHECK:    ldarb w0, [x0]
335    %r = load atomic i8, ptr %ptr seq_cst, align 1
336    ret i8 %r
337}
338
339define dso_local i8 @load_atomic_i8_unaligned_seq_cst_const(ptr readonly %ptr) {
340; CHECK-LABEL: load_atomic_i8_unaligned_seq_cst_const:
341; CHECK:    ldarb w0, [x0]
342    %r = load atomic i8, ptr %ptr seq_cst, align 1
343    ret i8 %r
344}
345
346define dso_local i16 @load_atomic_i16_unaligned_unordered(ptr %ptr) {
347; CHECK-LABEL: load_atomic_i16_unaligned_unordered:
348; CHECK:    bl __atomic_load
349    %r = load atomic i16, ptr %ptr unordered, align 1
350    ret i16 %r
351}
352
353define dso_local i16 @load_atomic_i16_unaligned_unordered_const(ptr readonly %ptr) {
354; CHECK-LABEL: load_atomic_i16_unaligned_unordered_const:
355; CHECK:    bl __atomic_load
356    %r = load atomic i16, ptr %ptr unordered, align 1
357    ret i16 %r
358}
359
360define dso_local i16 @load_atomic_i16_unaligned_monotonic(ptr %ptr) {
361; CHECK-LABEL: load_atomic_i16_unaligned_monotonic:
362; CHECK:    bl __atomic_load
363    %r = load atomic i16, ptr %ptr monotonic, align 1
364    ret i16 %r
365}
366
367define dso_local i16 @load_atomic_i16_unaligned_monotonic_const(ptr readonly %ptr) {
368; CHECK-LABEL: load_atomic_i16_unaligned_monotonic_const:
369; CHECK:    bl __atomic_load
370    %r = load atomic i16, ptr %ptr monotonic, align 1
371    ret i16 %r
372}
373
374define dso_local i16 @load_atomic_i16_unaligned_acquire(ptr %ptr) {
375; CHECK-LABEL: load_atomic_i16_unaligned_acquire:
376; CHECK:    bl __atomic_load
377    %r = load atomic i16, ptr %ptr acquire, align 1
378    ret i16 %r
379}
380
381define dso_local i16 @load_atomic_i16_unaligned_acquire_const(ptr readonly %ptr) {
382; CHECK-LABEL: load_atomic_i16_unaligned_acquire_const:
383; CHECK:    bl __atomic_load
384    %r = load atomic i16, ptr %ptr acquire, align 1
385    ret i16 %r
386}
387
388define dso_local i16 @load_atomic_i16_unaligned_seq_cst(ptr %ptr) {
389; CHECK-LABEL: load_atomic_i16_unaligned_seq_cst:
390; CHECK:    bl __atomic_load
391    %r = load atomic i16, ptr %ptr seq_cst, align 1
392    ret i16 %r
393}
394
395define dso_local i16 @load_atomic_i16_unaligned_seq_cst_const(ptr readonly %ptr) {
396; CHECK-LABEL: load_atomic_i16_unaligned_seq_cst_const:
397; CHECK:    bl __atomic_load
398    %r = load atomic i16, ptr %ptr seq_cst, align 1
399    ret i16 %r
400}
401
402define dso_local i32 @load_atomic_i32_unaligned_unordered(ptr %ptr) {
403; CHECK-LABEL: load_atomic_i32_unaligned_unordered:
404; CHECK:    bl __atomic_load
405    %r = load atomic i32, ptr %ptr unordered, align 1
406    ret i32 %r
407}
408
409define dso_local i32 @load_atomic_i32_unaligned_unordered_const(ptr readonly %ptr) {
410; CHECK-LABEL: load_atomic_i32_unaligned_unordered_const:
411; CHECK:    bl __atomic_load
412    %r = load atomic i32, ptr %ptr unordered, align 1
413    ret i32 %r
414}
415
416define dso_local i32 @load_atomic_i32_unaligned_monotonic(ptr %ptr) {
417; CHECK-LABEL: load_atomic_i32_unaligned_monotonic:
418; CHECK:    bl __atomic_load
419    %r = load atomic i32, ptr %ptr monotonic, align 1
420    ret i32 %r
421}
422
423define dso_local i32 @load_atomic_i32_unaligned_monotonic_const(ptr readonly %ptr) {
424; CHECK-LABEL: load_atomic_i32_unaligned_monotonic_const:
425; CHECK:    bl __atomic_load
426    %r = load atomic i32, ptr %ptr monotonic, align 1
427    ret i32 %r
428}
429
430define dso_local i32 @load_atomic_i32_unaligned_acquire(ptr %ptr) {
431; CHECK-LABEL: load_atomic_i32_unaligned_acquire:
432; CHECK:    bl __atomic_load
433    %r = load atomic i32, ptr %ptr acquire, align 1
434    ret i32 %r
435}
436
437define dso_local i32 @load_atomic_i32_unaligned_acquire_const(ptr readonly %ptr) {
438; CHECK-LABEL: load_atomic_i32_unaligned_acquire_const:
439; CHECK:    bl __atomic_load
440    %r = load atomic i32, ptr %ptr acquire, align 1
441    ret i32 %r
442}
443
444define dso_local i32 @load_atomic_i32_unaligned_seq_cst(ptr %ptr) {
445; CHECK-LABEL: load_atomic_i32_unaligned_seq_cst:
446; CHECK:    bl __atomic_load
447    %r = load atomic i32, ptr %ptr seq_cst, align 1
448    ret i32 %r
449}
450
451define dso_local i32 @load_atomic_i32_unaligned_seq_cst_const(ptr readonly %ptr) {
452; CHECK-LABEL: load_atomic_i32_unaligned_seq_cst_const:
453; CHECK:    bl __atomic_load
454    %r = load atomic i32, ptr %ptr seq_cst, align 1
455    ret i32 %r
456}
457
458define dso_local i64 @load_atomic_i64_unaligned_unordered(ptr %ptr) {
459; CHECK-LABEL: load_atomic_i64_unaligned_unordered:
460; CHECK:    bl __atomic_load
461    %r = load atomic i64, ptr %ptr unordered, align 1
462    ret i64 %r
463}
464
465define dso_local i64 @load_atomic_i64_unaligned_unordered_const(ptr readonly %ptr) {
466; CHECK-LABEL: load_atomic_i64_unaligned_unordered_const:
467; CHECK:    bl __atomic_load
468    %r = load atomic i64, ptr %ptr unordered, align 1
469    ret i64 %r
470}
471
472define dso_local i64 @load_atomic_i64_unaligned_monotonic(ptr %ptr) {
473; CHECK-LABEL: load_atomic_i64_unaligned_monotonic:
474; CHECK:    bl __atomic_load
475    %r = load atomic i64, ptr %ptr monotonic, align 1
476    ret i64 %r
477}
478
479define dso_local i64 @load_atomic_i64_unaligned_monotonic_const(ptr readonly %ptr) {
480; CHECK-LABEL: load_atomic_i64_unaligned_monotonic_const:
481; CHECK:    bl __atomic_load
482    %r = load atomic i64, ptr %ptr monotonic, align 1
483    ret i64 %r
484}
485
486define dso_local i64 @load_atomic_i64_unaligned_acquire(ptr %ptr) {
487; CHECK-LABEL: load_atomic_i64_unaligned_acquire:
488; CHECK:    bl __atomic_load
489    %r = load atomic i64, ptr %ptr acquire, align 1
490    ret i64 %r
491}
492
493define dso_local i64 @load_atomic_i64_unaligned_acquire_const(ptr readonly %ptr) {
494; CHECK-LABEL: load_atomic_i64_unaligned_acquire_const:
495; CHECK:    bl __atomic_load
496    %r = load atomic i64, ptr %ptr acquire, align 1
497    ret i64 %r
498}
499
500define dso_local i64 @load_atomic_i64_unaligned_seq_cst(ptr %ptr) {
501; CHECK-LABEL: load_atomic_i64_unaligned_seq_cst:
502; CHECK:    bl __atomic_load
503    %r = load atomic i64, ptr %ptr seq_cst, align 1
504    ret i64 %r
505}
506
507define dso_local i64 @load_atomic_i64_unaligned_seq_cst_const(ptr readonly %ptr) {
508; CHECK-LABEL: load_atomic_i64_unaligned_seq_cst_const:
509; CHECK:    bl __atomic_load
510    %r = load atomic i64, ptr %ptr seq_cst, align 1
511    ret i64 %r
512}
513
514define dso_local i128 @load_atomic_i128_unaligned_unordered(ptr %ptr) {
515; CHECK-LABEL: load_atomic_i128_unaligned_unordered:
516; CHECK:    bl __atomic_load
517    %r = load atomic i128, ptr %ptr unordered, align 1
518    ret i128 %r
519}
520
521define dso_local i128 @load_atomic_i128_unaligned_unordered_const(ptr readonly %ptr) {
522; CHECK-LABEL: load_atomic_i128_unaligned_unordered_const:
523; CHECK:    bl __atomic_load
524    %r = load atomic i128, ptr %ptr unordered, align 1
525    ret i128 %r
526}
527
528define dso_local i128 @load_atomic_i128_unaligned_monotonic(ptr %ptr) {
529; CHECK-LABEL: load_atomic_i128_unaligned_monotonic:
530; CHECK:    bl __atomic_load
531    %r = load atomic i128, ptr %ptr monotonic, align 1
532    ret i128 %r
533}
534
535define dso_local i128 @load_atomic_i128_unaligned_monotonic_const(ptr readonly %ptr) {
536; CHECK-LABEL: load_atomic_i128_unaligned_monotonic_const:
537; CHECK:    bl __atomic_load
538    %r = load atomic i128, ptr %ptr monotonic, align 1
539    ret i128 %r
540}
541
542define dso_local i128 @load_atomic_i128_unaligned_acquire(ptr %ptr) {
543; CHECK-LABEL: load_atomic_i128_unaligned_acquire:
544; CHECK:    bl __atomic_load
545    %r = load atomic i128, ptr %ptr acquire, align 1
546    ret i128 %r
547}
548
549define dso_local i128 @load_atomic_i128_unaligned_acquire_const(ptr readonly %ptr) {
550; CHECK-LABEL: load_atomic_i128_unaligned_acquire_const:
551; CHECK:    bl __atomic_load
552    %r = load atomic i128, ptr %ptr acquire, align 1
553    ret i128 %r
554}
555
556define dso_local i128 @load_atomic_i128_unaligned_seq_cst(ptr %ptr) {
557; CHECK-LABEL: load_atomic_i128_unaligned_seq_cst:
558; CHECK:    bl __atomic_load
559    %r = load atomic i128, ptr %ptr seq_cst, align 1
560    ret i128 %r
561}
562
563define dso_local i128 @load_atomic_i128_unaligned_seq_cst_const(ptr readonly %ptr) {
564; CHECK-LABEL: load_atomic_i128_unaligned_seq_cst_const:
565; CHECK:    bl __atomic_load
566    %r = load atomic i128, ptr %ptr seq_cst, align 1
567    ret i128 %r
568}
569
570define dso_local half @load_atomic_f16_aligned_unordered(ptr %ptr) {
571; CHECK-LABEL: load_atomic_f16_aligned_unordered:
572; CHECK:    ldrh w8, [x0]
573    %r = load atomic half, ptr %ptr unordered, align 2
574    ret half %r
575}
576
577define dso_local half @load_atomic_f16_aligned_unordered_const(ptr readonly %ptr) {
578; CHECK-LABEL: load_atomic_f16_aligned_unordered_const:
579; CHECK:    ldrh w8, [x0]
580    %r = load atomic half, ptr %ptr unordered, align 2
581    ret half %r
582}
583
584define dso_local half @load_atomic_f16_aligned_monotonic(ptr %ptr) {
585; CHECK-LABEL: load_atomic_f16_aligned_monotonic:
586; CHECK:    ldrh w8, [x0]
587    %r = load atomic half, ptr %ptr monotonic, align 2
588    ret half %r
589}
590
591define dso_local half @load_atomic_f16_aligned_monotonic_const(ptr readonly %ptr) {
592; CHECK-LABEL: load_atomic_f16_aligned_monotonic_const:
593; CHECK:    ldrh w8, [x0]
594    %r = load atomic half, ptr %ptr monotonic, align 2
595    ret half %r
596}
597
598define dso_local half @load_atomic_f16_aligned_acquire(ptr %ptr) {
599; CHECK-LABEL: load_atomic_f16_aligned_acquire:
600; CHECK:    ldarh w8, [x0]
601    %r = load atomic half, ptr %ptr acquire, align 2
602    ret half %r
603}
604
605define dso_local half @load_atomic_f16_aligned_acquire_const(ptr readonly %ptr) {
606; CHECK-LABEL: load_atomic_f16_aligned_acquire_const:
607; CHECK:    ldarh w8, [x0]
608    %r = load atomic half, ptr %ptr acquire, align 2
609    ret half %r
610}
611
612define dso_local half @load_atomic_f16_aligned_seq_cst(ptr %ptr) {
613; CHECK-LABEL: load_atomic_f16_aligned_seq_cst:
614; CHECK:    ldarh w8, [x0]
615    %r = load atomic half, ptr %ptr seq_cst, align 2
616    ret half %r
617}
618
619define dso_local half @load_atomic_f16_aligned_seq_cst_const(ptr readonly %ptr) {
620; CHECK-LABEL: load_atomic_f16_aligned_seq_cst_const:
621; CHECK:    ldarh w8, [x0]
622    %r = load atomic half, ptr %ptr seq_cst, align 2
623    ret half %r
624}
625
626define dso_local bfloat @load_atomic_bf16_aligned_unordered(ptr %ptr) {
627; CHECK-LABEL: load_atomic_bf16_aligned_unordered:
628; CHECK:    ldrh w8, [x0]
629    %r = load atomic bfloat, ptr %ptr unordered, align 2
630    ret bfloat %r
631}
632
633define dso_local bfloat @load_atomic_bf16_aligned_unordered_const(ptr readonly %ptr) {
634; CHECK-LABEL: load_atomic_bf16_aligned_unordered_const:
635; CHECK:    ldrh w8, [x0]
636    %r = load atomic bfloat, ptr %ptr unordered, align 2
637    ret bfloat %r
638}
639
640define dso_local bfloat @load_atomic_bf16_aligned_monotonic(ptr %ptr) {
641; CHECK-LABEL: load_atomic_bf16_aligned_monotonic:
642; CHECK:    ldrh w8, [x0]
643    %r = load atomic bfloat, ptr %ptr monotonic, align 2
644    ret bfloat %r
645}
646
647define dso_local bfloat @load_atomic_bf16_aligned_monotonic_const(ptr readonly %ptr) {
648; CHECK-LABEL: load_atomic_bf16_aligned_monotonic_const:
649; CHECK:    ldrh w8, [x0]
650    %r = load atomic bfloat, ptr %ptr monotonic, align 2
651    ret bfloat %r
652}
653
654define dso_local bfloat @load_atomic_bf16_aligned_acquire(ptr %ptr) {
655; CHECK-LABEL: load_atomic_bf16_aligned_acquire:
656; CHECK:    ldarh w8, [x0]
657    %r = load atomic bfloat, ptr %ptr acquire, align 2
658    ret bfloat %r
659}
660
661define dso_local bfloat @load_atomic_bf16_aligned_acquire_const(ptr readonly %ptr) {
662; CHECK-LABEL: load_atomic_bf16_aligned_acquire_const:
663; CHECK:    ldarh w8, [x0]
664    %r = load atomic bfloat, ptr %ptr acquire, align 2
665    ret bfloat %r
666}
667
668define dso_local bfloat @load_atomic_bf16_aligned_seq_cst(ptr %ptr) {
669; CHECK-LABEL: load_atomic_bf16_aligned_seq_cst:
670; CHECK:    ldarh w8, [x0]
671    %r = load atomic bfloat, ptr %ptr seq_cst, align 2
672    ret bfloat %r
673}
674
675define dso_local bfloat @load_atomic_bf16_aligned_seq_cst_const(ptr readonly %ptr) {
676; CHECK-LABEL: load_atomic_bf16_aligned_seq_cst_const:
677; CHECK:    ldarh w8, [x0]
678    %r = load atomic bfloat, ptr %ptr seq_cst, align 2
679    ret bfloat %r
680}
681
682;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
683; -O0: {{.*}}
684; -O1: {{.*}}
685