xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomic-load-v8a.ll (revision 7b3bbd83c0c24087072ec5b22a76799ab31f87d5)
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=+v8a -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8a -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; -O0-LABEL: load_atomic_i128_aligned_unordered:
232; -O0:    ldxp x0, x1, [x9]
233; -O0:    cmp x0, x10
234; -O0:    cmp x1, x10
235; -O0:    stxp w8, x10, x10, [x9]
236; -O0:    stxp w8, x0, x1, [x9]
237;
238; -O1-LABEL: load_atomic_i128_aligned_unordered:
239; -O1:    ldxp x0, x1, [x8]
240; -O1:    stxp w9, x0, x1, [x8]
241    %r = load atomic i128, ptr %ptr unordered, align 16
242    ret i128 %r
243}
244
245define dso_local i128 @load_atomic_i128_aligned_unordered_const(ptr readonly %ptr) {
246; -O0-LABEL: load_atomic_i128_aligned_unordered_const:
247; -O0:    ldxp x0, x1, [x9]
248; -O0:    cmp x0, x10
249; -O0:    cmp x1, x10
250; -O0:    stxp w8, x10, x10, [x9]
251; -O0:    stxp w8, x0, x1, [x9]
252;
253; -O1-LABEL: load_atomic_i128_aligned_unordered_const:
254; -O1:    ldxp x0, x1, [x8]
255; -O1:    stxp w9, x0, x1, [x8]
256    %r = load atomic i128, ptr %ptr unordered, align 16
257    ret i128 %r
258}
259
260define dso_local i128 @load_atomic_i128_aligned_monotonic(ptr %ptr) {
261; -O0-LABEL: load_atomic_i128_aligned_monotonic:
262; -O0:    ldxp x0, x1, [x9]
263; -O0:    cmp x0, x10
264; -O0:    cmp x1, x10
265; -O0:    stxp w8, x10, x10, [x9]
266; -O0:    stxp w8, x0, x1, [x9]
267;
268; -O1-LABEL: load_atomic_i128_aligned_monotonic:
269; -O1:    ldxp x0, x1, [x8]
270; -O1:    stxp w9, x0, x1, [x8]
271    %r = load atomic i128, ptr %ptr monotonic, align 16
272    ret i128 %r
273}
274
275define dso_local i128 @load_atomic_i128_aligned_monotonic_const(ptr readonly %ptr) {
276; -O0-LABEL: load_atomic_i128_aligned_monotonic_const:
277; -O0:    ldxp x0, x1, [x9]
278; -O0:    cmp x0, x10
279; -O0:    cmp x1, x10
280; -O0:    stxp w8, x10, x10, [x9]
281; -O0:    stxp w8, x0, x1, [x9]
282;
283; -O1-LABEL: load_atomic_i128_aligned_monotonic_const:
284; -O1:    ldxp x0, x1, [x8]
285; -O1:    stxp w9, x0, x1, [x8]
286    %r = load atomic i128, ptr %ptr monotonic, align 16
287    ret i128 %r
288}
289
290define dso_local i128 @load_atomic_i128_aligned_acquire(ptr %ptr) {
291; -O0-LABEL: load_atomic_i128_aligned_acquire:
292; -O0:    ldaxp x0, x1, [x9]
293; -O0:    cmp x0, x10
294; -O0:    cmp x1, x10
295; -O0:    stxp w8, x10, x10, [x9]
296; -O0:    stxp w8, x0, x1, [x9]
297;
298; -O1-LABEL: load_atomic_i128_aligned_acquire:
299; -O1:    ldaxp x0, x1, [x8]
300; -O1:    stxp w9, x0, x1, [x8]
301    %r = load atomic i128, ptr %ptr acquire, align 16
302    ret i128 %r
303}
304
305define dso_local i128 @load_atomic_i128_aligned_acquire_const(ptr readonly %ptr) {
306; -O0-LABEL: load_atomic_i128_aligned_acquire_const:
307; -O0:    ldaxp x0, x1, [x9]
308; -O0:    cmp x0, x10
309; -O0:    cmp x1, x10
310; -O0:    stxp w8, x10, x10, [x9]
311; -O0:    stxp w8, x0, x1, [x9]
312;
313; -O1-LABEL: load_atomic_i128_aligned_acquire_const:
314; -O1:    ldaxp x0, x1, [x8]
315; -O1:    stxp w9, x0, x1, [x8]
316    %r = load atomic i128, ptr %ptr acquire, align 16
317    ret i128 %r
318}
319
320define dso_local i128 @load_atomic_i128_aligned_seq_cst(ptr %ptr) {
321; -O0-LABEL: load_atomic_i128_aligned_seq_cst:
322; -O0:    ldaxp x0, x1, [x9]
323; -O0:    cmp x0, x10
324; -O0:    cmp x1, x10
325; -O0:    stlxp w8, x10, x10, [x9]
326; -O0:    stlxp w8, x0, x1, [x9]
327;
328; -O1-LABEL: load_atomic_i128_aligned_seq_cst:
329; -O1:    ldaxp x0, x1, [x8]
330; -O1:    stlxp w9, x0, x1, [x8]
331    %r = load atomic i128, ptr %ptr seq_cst, align 16
332    ret i128 %r
333}
334
335define dso_local i128 @load_atomic_i128_aligned_seq_cst_const(ptr readonly %ptr) {
336; -O0-LABEL: load_atomic_i128_aligned_seq_cst_const:
337; -O0:    ldaxp x0, x1, [x9]
338; -O0:    cmp x0, x10
339; -O0:    cmp x1, x10
340; -O0:    stlxp w8, x10, x10, [x9]
341; -O0:    stlxp w8, x0, x1, [x9]
342;
343; -O1-LABEL: load_atomic_i128_aligned_seq_cst_const:
344; -O1:    ldaxp x0, x1, [x8]
345; -O1:    stlxp w9, x0, x1, [x8]
346    %r = load atomic i128, ptr %ptr seq_cst, align 16
347    ret i128 %r
348}
349
350define dso_local i8 @load_atomic_i8_unaligned_unordered(ptr %ptr) {
351; CHECK-LABEL: load_atomic_i8_unaligned_unordered:
352; CHECK:    ldrb w0, [x0]
353    %r = load atomic i8, ptr %ptr unordered, align 1
354    ret i8 %r
355}
356
357define dso_local i8 @load_atomic_i8_unaligned_unordered_const(ptr readonly %ptr) {
358; CHECK-LABEL: load_atomic_i8_unaligned_unordered_const:
359; CHECK:    ldrb w0, [x0]
360    %r = load atomic i8, ptr %ptr unordered, align 1
361    ret i8 %r
362}
363
364define dso_local i8 @load_atomic_i8_unaligned_monotonic(ptr %ptr) {
365; CHECK-LABEL: load_atomic_i8_unaligned_monotonic:
366; CHECK:    ldrb w0, [x0]
367    %r = load atomic i8, ptr %ptr monotonic, align 1
368    ret i8 %r
369}
370
371define dso_local i8 @load_atomic_i8_unaligned_monotonic_const(ptr readonly %ptr) {
372; CHECK-LABEL: load_atomic_i8_unaligned_monotonic_const:
373; CHECK:    ldrb w0, [x0]
374    %r = load atomic i8, ptr %ptr monotonic, align 1
375    ret i8 %r
376}
377
378define dso_local i8 @load_atomic_i8_unaligned_acquire(ptr %ptr) {
379; CHECK-LABEL: load_atomic_i8_unaligned_acquire:
380; CHECK:    ldarb w0, [x0]
381    %r = load atomic i8, ptr %ptr acquire, align 1
382    ret i8 %r
383}
384
385define dso_local i8 @load_atomic_i8_unaligned_acquire_const(ptr readonly %ptr) {
386; CHECK-LABEL: load_atomic_i8_unaligned_acquire_const:
387; CHECK:    ldarb w0, [x0]
388    %r = load atomic i8, ptr %ptr acquire, align 1
389    ret i8 %r
390}
391
392define dso_local i8 @load_atomic_i8_unaligned_seq_cst(ptr %ptr) {
393; CHECK-LABEL: load_atomic_i8_unaligned_seq_cst:
394; CHECK:    ldarb w0, [x0]
395    %r = load atomic i8, ptr %ptr seq_cst, align 1
396    ret i8 %r
397}
398
399define dso_local i8 @load_atomic_i8_unaligned_seq_cst_const(ptr readonly %ptr) {
400; CHECK-LABEL: load_atomic_i8_unaligned_seq_cst_const:
401; CHECK:    ldarb w0, [x0]
402    %r = load atomic i8, ptr %ptr seq_cst, align 1
403    ret i8 %r
404}
405
406define dso_local i16 @load_atomic_i16_unaligned_unordered(ptr %ptr) {
407; CHECK-LABEL: load_atomic_i16_unaligned_unordered:
408; CHECK:    bl __atomic_load
409    %r = load atomic i16, ptr %ptr unordered, align 1
410    ret i16 %r
411}
412
413define dso_local i16 @load_atomic_i16_unaligned_unordered_const(ptr readonly %ptr) {
414; CHECK-LABEL: load_atomic_i16_unaligned_unordered_const:
415; CHECK:    bl __atomic_load
416    %r = load atomic i16, ptr %ptr unordered, align 1
417    ret i16 %r
418}
419
420define dso_local i16 @load_atomic_i16_unaligned_monotonic(ptr %ptr) {
421; CHECK-LABEL: load_atomic_i16_unaligned_monotonic:
422; CHECK:    bl __atomic_load
423    %r = load atomic i16, ptr %ptr monotonic, align 1
424    ret i16 %r
425}
426
427define dso_local i16 @load_atomic_i16_unaligned_monotonic_const(ptr readonly %ptr) {
428; CHECK-LABEL: load_atomic_i16_unaligned_monotonic_const:
429; CHECK:    bl __atomic_load
430    %r = load atomic i16, ptr %ptr monotonic, align 1
431    ret i16 %r
432}
433
434define dso_local i16 @load_atomic_i16_unaligned_acquire(ptr %ptr) {
435; CHECK-LABEL: load_atomic_i16_unaligned_acquire:
436; CHECK:    bl __atomic_load
437    %r = load atomic i16, ptr %ptr acquire, align 1
438    ret i16 %r
439}
440
441define dso_local i16 @load_atomic_i16_unaligned_acquire_const(ptr readonly %ptr) {
442; CHECK-LABEL: load_atomic_i16_unaligned_acquire_const:
443; CHECK:    bl __atomic_load
444    %r = load atomic i16, ptr %ptr acquire, align 1
445    ret i16 %r
446}
447
448define dso_local i16 @load_atomic_i16_unaligned_seq_cst(ptr %ptr) {
449; CHECK-LABEL: load_atomic_i16_unaligned_seq_cst:
450; CHECK:    bl __atomic_load
451    %r = load atomic i16, ptr %ptr seq_cst, align 1
452    ret i16 %r
453}
454
455define dso_local i16 @load_atomic_i16_unaligned_seq_cst_const(ptr readonly %ptr) {
456; CHECK-LABEL: load_atomic_i16_unaligned_seq_cst_const:
457; CHECK:    bl __atomic_load
458    %r = load atomic i16, ptr %ptr seq_cst, align 1
459    ret i16 %r
460}
461
462define dso_local i32 @load_atomic_i32_unaligned_unordered(ptr %ptr) {
463; CHECK-LABEL: load_atomic_i32_unaligned_unordered:
464; CHECK:    bl __atomic_load
465    %r = load atomic i32, ptr %ptr unordered, align 1
466    ret i32 %r
467}
468
469define dso_local i32 @load_atomic_i32_unaligned_unordered_const(ptr readonly %ptr) {
470; CHECK-LABEL: load_atomic_i32_unaligned_unordered_const:
471; CHECK:    bl __atomic_load
472    %r = load atomic i32, ptr %ptr unordered, align 1
473    ret i32 %r
474}
475
476define dso_local i32 @load_atomic_i32_unaligned_monotonic(ptr %ptr) {
477; CHECK-LABEL: load_atomic_i32_unaligned_monotonic:
478; CHECK:    bl __atomic_load
479    %r = load atomic i32, ptr %ptr monotonic, align 1
480    ret i32 %r
481}
482
483define dso_local i32 @load_atomic_i32_unaligned_monotonic_const(ptr readonly %ptr) {
484; CHECK-LABEL: load_atomic_i32_unaligned_monotonic_const:
485; CHECK:    bl __atomic_load
486    %r = load atomic i32, ptr %ptr monotonic, align 1
487    ret i32 %r
488}
489
490define dso_local i32 @load_atomic_i32_unaligned_acquire(ptr %ptr) {
491; CHECK-LABEL: load_atomic_i32_unaligned_acquire:
492; CHECK:    bl __atomic_load
493    %r = load atomic i32, ptr %ptr acquire, align 1
494    ret i32 %r
495}
496
497define dso_local i32 @load_atomic_i32_unaligned_acquire_const(ptr readonly %ptr) {
498; CHECK-LABEL: load_atomic_i32_unaligned_acquire_const:
499; CHECK:    bl __atomic_load
500    %r = load atomic i32, ptr %ptr acquire, align 1
501    ret i32 %r
502}
503
504define dso_local i32 @load_atomic_i32_unaligned_seq_cst(ptr %ptr) {
505; CHECK-LABEL: load_atomic_i32_unaligned_seq_cst:
506; CHECK:    bl __atomic_load
507    %r = load atomic i32, ptr %ptr seq_cst, align 1
508    ret i32 %r
509}
510
511define dso_local i32 @load_atomic_i32_unaligned_seq_cst_const(ptr readonly %ptr) {
512; CHECK-LABEL: load_atomic_i32_unaligned_seq_cst_const:
513; CHECK:    bl __atomic_load
514    %r = load atomic i32, ptr %ptr seq_cst, align 1
515    ret i32 %r
516}
517
518define dso_local i64 @load_atomic_i64_unaligned_unordered(ptr %ptr) {
519; CHECK-LABEL: load_atomic_i64_unaligned_unordered:
520; CHECK:    bl __atomic_load
521    %r = load atomic i64, ptr %ptr unordered, align 1
522    ret i64 %r
523}
524
525define dso_local i64 @load_atomic_i64_unaligned_unordered_const(ptr readonly %ptr) {
526; CHECK-LABEL: load_atomic_i64_unaligned_unordered_const:
527; CHECK:    bl __atomic_load
528    %r = load atomic i64, ptr %ptr unordered, align 1
529    ret i64 %r
530}
531
532define dso_local i64 @load_atomic_i64_unaligned_monotonic(ptr %ptr) {
533; CHECK-LABEL: load_atomic_i64_unaligned_monotonic:
534; CHECK:    bl __atomic_load
535    %r = load atomic i64, ptr %ptr monotonic, align 1
536    ret i64 %r
537}
538
539define dso_local i64 @load_atomic_i64_unaligned_monotonic_const(ptr readonly %ptr) {
540; CHECK-LABEL: load_atomic_i64_unaligned_monotonic_const:
541; CHECK:    bl __atomic_load
542    %r = load atomic i64, ptr %ptr monotonic, align 1
543    ret i64 %r
544}
545
546define dso_local i64 @load_atomic_i64_unaligned_acquire(ptr %ptr) {
547; CHECK-LABEL: load_atomic_i64_unaligned_acquire:
548; CHECK:    bl __atomic_load
549    %r = load atomic i64, ptr %ptr acquire, align 1
550    ret i64 %r
551}
552
553define dso_local i64 @load_atomic_i64_unaligned_acquire_const(ptr readonly %ptr) {
554; CHECK-LABEL: load_atomic_i64_unaligned_acquire_const:
555; CHECK:    bl __atomic_load
556    %r = load atomic i64, ptr %ptr acquire, align 1
557    ret i64 %r
558}
559
560define dso_local i64 @load_atomic_i64_unaligned_seq_cst(ptr %ptr) {
561; CHECK-LABEL: load_atomic_i64_unaligned_seq_cst:
562; CHECK:    bl __atomic_load
563    %r = load atomic i64, ptr %ptr seq_cst, align 1
564    ret i64 %r
565}
566
567define dso_local i64 @load_atomic_i64_unaligned_seq_cst_const(ptr readonly %ptr) {
568; CHECK-LABEL: load_atomic_i64_unaligned_seq_cst_const:
569; CHECK:    bl __atomic_load
570    %r = load atomic i64, ptr %ptr seq_cst, align 1
571    ret i64 %r
572}
573
574define dso_local i128 @load_atomic_i128_unaligned_unordered(ptr %ptr) {
575; CHECK-LABEL: load_atomic_i128_unaligned_unordered:
576; CHECK:    bl __atomic_load
577    %r = load atomic i128, ptr %ptr unordered, align 1
578    ret i128 %r
579}
580
581define dso_local i128 @load_atomic_i128_unaligned_unordered_const(ptr readonly %ptr) {
582; CHECK-LABEL: load_atomic_i128_unaligned_unordered_const:
583; CHECK:    bl __atomic_load
584    %r = load atomic i128, ptr %ptr unordered, align 1
585    ret i128 %r
586}
587
588define dso_local i128 @load_atomic_i128_unaligned_monotonic(ptr %ptr) {
589; CHECK-LABEL: load_atomic_i128_unaligned_monotonic:
590; CHECK:    bl __atomic_load
591    %r = load atomic i128, ptr %ptr monotonic, align 1
592    ret i128 %r
593}
594
595define dso_local i128 @load_atomic_i128_unaligned_monotonic_const(ptr readonly %ptr) {
596; CHECK-LABEL: load_atomic_i128_unaligned_monotonic_const:
597; CHECK:    bl __atomic_load
598    %r = load atomic i128, ptr %ptr monotonic, align 1
599    ret i128 %r
600}
601
602define dso_local i128 @load_atomic_i128_unaligned_acquire(ptr %ptr) {
603; CHECK-LABEL: load_atomic_i128_unaligned_acquire:
604; CHECK:    bl __atomic_load
605    %r = load atomic i128, ptr %ptr acquire, align 1
606    ret i128 %r
607}
608
609define dso_local i128 @load_atomic_i128_unaligned_acquire_const(ptr readonly %ptr) {
610; CHECK-LABEL: load_atomic_i128_unaligned_acquire_const:
611; CHECK:    bl __atomic_load
612    %r = load atomic i128, ptr %ptr acquire, align 1
613    ret i128 %r
614}
615
616define dso_local i128 @load_atomic_i128_unaligned_seq_cst(ptr %ptr) {
617; CHECK-LABEL: load_atomic_i128_unaligned_seq_cst:
618; CHECK:    bl __atomic_load
619    %r = load atomic i128, ptr %ptr seq_cst, align 1
620    ret i128 %r
621}
622
623define dso_local i128 @load_atomic_i128_unaligned_seq_cst_const(ptr readonly %ptr) {
624; CHECK-LABEL: load_atomic_i128_unaligned_seq_cst_const:
625; CHECK:    bl __atomic_load
626    %r = load atomic i128, ptr %ptr seq_cst, align 1
627    ret i128 %r
628}
629