xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomic-store-outline_atomics.ll (revision f3fb973924a9ba3bdd8dfee4dc85337e8b033ab4)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st|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_be -mattr=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O1
5
6define dso_local void @store_atomic_i8_aligned_unordered(i8 %value, ptr %ptr) {
7; CHECK-LABEL: store_atomic_i8_aligned_unordered:
8; CHECK:    strb w0, [x1]
9    store atomic i8 %value, ptr %ptr unordered, align 1
10    ret void
11}
12
13define dso_local void @store_atomic_i8_aligned_monotonic(i8 %value, ptr %ptr) {
14; CHECK-LABEL: store_atomic_i8_aligned_monotonic:
15; CHECK:    strb w0, [x1]
16    store atomic i8 %value, ptr %ptr monotonic, align 1
17    ret void
18}
19
20define dso_local void @store_atomic_i8_aligned_release(i8 %value, ptr %ptr) {
21; CHECK-LABEL: store_atomic_i8_aligned_release:
22; CHECK:    stlrb w0, [x1]
23    store atomic i8 %value, ptr %ptr release, align 1
24    ret void
25}
26
27define dso_local void @store_atomic_i8_aligned_seq_cst(i8 %value, ptr %ptr) {
28; CHECK-LABEL: store_atomic_i8_aligned_seq_cst:
29; CHECK:    stlrb w0, [x1]
30    store atomic i8 %value, ptr %ptr seq_cst, align 1
31    ret void
32}
33
34define dso_local void @store_atomic_i16_aligned_unordered(i16 %value, ptr %ptr) {
35; CHECK-LABEL: store_atomic_i16_aligned_unordered:
36; CHECK:    strh w0, [x1]
37    store atomic i16 %value, ptr %ptr unordered, align 2
38    ret void
39}
40
41define dso_local void @store_atomic_i16_aligned_monotonic(i16 %value, ptr %ptr) {
42; CHECK-LABEL: store_atomic_i16_aligned_monotonic:
43; CHECK:    strh w0, [x1]
44    store atomic i16 %value, ptr %ptr monotonic, align 2
45    ret void
46}
47
48define dso_local void @store_atomic_i16_aligned_release(i16 %value, ptr %ptr) {
49; CHECK-LABEL: store_atomic_i16_aligned_release:
50; CHECK:    stlrh w0, [x1]
51    store atomic i16 %value, ptr %ptr release, align 2
52    ret void
53}
54
55define dso_local void @store_atomic_i16_aligned_seq_cst(i16 %value, ptr %ptr) {
56; CHECK-LABEL: store_atomic_i16_aligned_seq_cst:
57; CHECK:    stlrh w0, [x1]
58    store atomic i16 %value, ptr %ptr seq_cst, align 2
59    ret void
60}
61
62define dso_local void @store_atomic_i32_aligned_unordered(i32 %value, ptr %ptr) {
63; CHECK-LABEL: store_atomic_i32_aligned_unordered:
64; CHECK:    str w0, [x1]
65    store atomic i32 %value, ptr %ptr unordered, align 4
66    ret void
67}
68
69define dso_local void @store_atomic_i32_aligned_monotonic(i32 %value, ptr %ptr) {
70; CHECK-LABEL: store_atomic_i32_aligned_monotonic:
71; CHECK:    str w0, [x1]
72    store atomic i32 %value, ptr %ptr monotonic, align 4
73    ret void
74}
75
76define dso_local void @store_atomic_i32_aligned_release(i32 %value, ptr %ptr) {
77; CHECK-LABEL: store_atomic_i32_aligned_release:
78; CHECK:    stlr w0, [x1]
79    store atomic i32 %value, ptr %ptr release, align 4
80    ret void
81}
82
83define dso_local void @store_atomic_i32_aligned_seq_cst(i32 %value, ptr %ptr) {
84; CHECK-LABEL: store_atomic_i32_aligned_seq_cst:
85; CHECK:    stlr w0, [x1]
86    store atomic i32 %value, ptr %ptr seq_cst, align 4
87    ret void
88}
89
90define dso_local void @store_atomic_i64_aligned_unordered(i64 %value, ptr %ptr) {
91; CHECK-LABEL: store_atomic_i64_aligned_unordered:
92; CHECK:    str x0, [x1]
93    store atomic i64 %value, ptr %ptr unordered, align 8
94    ret void
95}
96
97define dso_local void @store_atomic_i64_aligned_monotonic(i64 %value, ptr %ptr) {
98; CHECK-LABEL: store_atomic_i64_aligned_monotonic:
99; CHECK:    str x0, [x1]
100    store atomic i64 %value, ptr %ptr monotonic, align 8
101    ret void
102}
103
104define dso_local void @store_atomic_i64_aligned_release(i64 %value, ptr %ptr) {
105; CHECK-LABEL: store_atomic_i64_aligned_release:
106; CHECK:    stlr x0, [x1]
107    store atomic i64 %value, ptr %ptr release, align 8
108    ret void
109}
110
111define dso_local void @store_atomic_i64_aligned_seq_cst(i64 %value, ptr %ptr) {
112; CHECK-LABEL: store_atomic_i64_aligned_seq_cst:
113; CHECK:    stlr x0, [x1]
114    store atomic i64 %value, ptr %ptr seq_cst, align 8
115    ret void
116}
117
118define dso_local void @store_atomic_i128_aligned_unordered(i128 %value, ptr %ptr) {
119; -O0-LABEL: store_atomic_i128_aligned_unordered:
120; -O0:    bl __aarch64_cas16_relax
121; -O0:    subs x10, x10, x11
122; -O0:    ccmp x8, x9, #0, eq
123;
124; -O1-LABEL: store_atomic_i128_aligned_unordered:
125; -O1:    ldxp xzr, x8, [x2]
126; -O1:    stxp w8, x1, x0, [x2]
127    store atomic i128 %value, ptr %ptr unordered, align 16
128    ret void
129}
130
131define dso_local void @store_atomic_i128_aligned_monotonic(i128 %value, ptr %ptr) {
132; -O0-LABEL: store_atomic_i128_aligned_monotonic:
133; -O0:    bl __aarch64_cas16_relax
134; -O0:    subs x10, x10, x11
135; -O0:    ccmp x8, x9, #0, eq
136;
137; -O1-LABEL: store_atomic_i128_aligned_monotonic:
138; -O1:    ldxp xzr, x8, [x2]
139; -O1:    stxp w8, x1, x0, [x2]
140    store atomic i128 %value, ptr %ptr monotonic, align 16
141    ret void
142}
143
144define dso_local void @store_atomic_i128_aligned_release(i128 %value, ptr %ptr) {
145; -O0-LABEL: store_atomic_i128_aligned_release:
146; -O0:    bl __aarch64_cas16_rel
147; -O0:    subs x10, x10, x11
148; -O0:    ccmp x8, x9, #0, eq
149;
150; -O1-LABEL: store_atomic_i128_aligned_release:
151; -O1:    ldxp xzr, x8, [x2]
152; -O1:    stlxp w8, x1, x0, [x2]
153    store atomic i128 %value, ptr %ptr release, align 16
154    ret void
155}
156
157define dso_local void @store_atomic_i128_aligned_seq_cst(i128 %value, ptr %ptr) {
158; -O0-LABEL: store_atomic_i128_aligned_seq_cst:
159; -O0:    bl __aarch64_cas16_acq_rel
160; -O0:    subs x10, x10, x11
161; -O0:    ccmp x8, x9, #0, eq
162;
163; -O1-LABEL: store_atomic_i128_aligned_seq_cst:
164; -O1:    ldaxp xzr, x8, [x2]
165; -O1:    stlxp w8, x1, x0, [x2]
166    store atomic i128 %value, ptr %ptr seq_cst, align 16
167    ret void
168}
169
170define dso_local void @store_atomic_i8_unaligned_unordered(i8 %value, ptr %ptr) {
171; CHECK-LABEL: store_atomic_i8_unaligned_unordered:
172; CHECK:    strb w0, [x1]
173    store atomic i8 %value, ptr %ptr unordered, align 1
174    ret void
175}
176
177define dso_local void @store_atomic_i8_unaligned_monotonic(i8 %value, ptr %ptr) {
178; CHECK-LABEL: store_atomic_i8_unaligned_monotonic:
179; CHECK:    strb w0, [x1]
180    store atomic i8 %value, ptr %ptr monotonic, align 1
181    ret void
182}
183
184define dso_local void @store_atomic_i8_unaligned_release(i8 %value, ptr %ptr) {
185; CHECK-LABEL: store_atomic_i8_unaligned_release:
186; CHECK:    stlrb w0, [x1]
187    store atomic i8 %value, ptr %ptr release, align 1
188    ret void
189}
190
191define dso_local void @store_atomic_i8_unaligned_seq_cst(i8 %value, ptr %ptr) {
192; CHECK-LABEL: store_atomic_i8_unaligned_seq_cst:
193; CHECK:    stlrb w0, [x1]
194    store atomic i8 %value, ptr %ptr seq_cst, align 1
195    ret void
196}
197
198define dso_local void @store_atomic_i16_unaligned_unordered(i16 %value, ptr %ptr) {
199; CHECK-LABEL: store_atomic_i16_unaligned_unordered:
200; CHECK:    bl __atomic_store
201    store atomic i16 %value, ptr %ptr unordered, align 1
202    ret void
203}
204
205define dso_local void @store_atomic_i16_unaligned_monotonic(i16 %value, ptr %ptr) {
206; CHECK-LABEL: store_atomic_i16_unaligned_monotonic:
207; CHECK:    bl __atomic_store
208    store atomic i16 %value, ptr %ptr monotonic, align 1
209    ret void
210}
211
212define dso_local void @store_atomic_i16_unaligned_release(i16 %value, ptr %ptr) {
213; CHECK-LABEL: store_atomic_i16_unaligned_release:
214; CHECK:    bl __atomic_store
215    store atomic i16 %value, ptr %ptr release, align 1
216    ret void
217}
218
219define dso_local void @store_atomic_i16_unaligned_seq_cst(i16 %value, ptr %ptr) {
220; CHECK-LABEL: store_atomic_i16_unaligned_seq_cst:
221; CHECK:    bl __atomic_store
222    store atomic i16 %value, ptr %ptr seq_cst, align 1
223    ret void
224}
225
226define dso_local void @store_atomic_i32_unaligned_unordered(i32 %value, ptr %ptr) {
227; CHECK-LABEL: store_atomic_i32_unaligned_unordered:
228; CHECK:    bl __atomic_store
229    store atomic i32 %value, ptr %ptr unordered, align 1
230    ret void
231}
232
233define dso_local void @store_atomic_i32_unaligned_monotonic(i32 %value, ptr %ptr) {
234; CHECK-LABEL: store_atomic_i32_unaligned_monotonic:
235; CHECK:    bl __atomic_store
236    store atomic i32 %value, ptr %ptr monotonic, align 1
237    ret void
238}
239
240define dso_local void @store_atomic_i32_unaligned_release(i32 %value, ptr %ptr) {
241; CHECK-LABEL: store_atomic_i32_unaligned_release:
242; CHECK:    bl __atomic_store
243    store atomic i32 %value, ptr %ptr release, align 1
244    ret void
245}
246
247define dso_local void @store_atomic_i32_unaligned_seq_cst(i32 %value, ptr %ptr) {
248; CHECK-LABEL: store_atomic_i32_unaligned_seq_cst:
249; CHECK:    bl __atomic_store
250    store atomic i32 %value, ptr %ptr seq_cst, align 1
251    ret void
252}
253
254define dso_local void @store_atomic_i64_unaligned_unordered(i64 %value, ptr %ptr) {
255; CHECK-LABEL: store_atomic_i64_unaligned_unordered:
256; CHECK:    bl __atomic_store
257    store atomic i64 %value, ptr %ptr unordered, align 1
258    ret void
259}
260
261define dso_local void @store_atomic_i64_unaligned_monotonic(i64 %value, ptr %ptr) {
262; CHECK-LABEL: store_atomic_i64_unaligned_monotonic:
263; CHECK:    bl __atomic_store
264    store atomic i64 %value, ptr %ptr monotonic, align 1
265    ret void
266}
267
268define dso_local void @store_atomic_i64_unaligned_release(i64 %value, ptr %ptr) {
269; CHECK-LABEL: store_atomic_i64_unaligned_release:
270; CHECK:    bl __atomic_store
271    store atomic i64 %value, ptr %ptr release, align 1
272    ret void
273}
274
275define dso_local void @store_atomic_i64_unaligned_seq_cst(i64 %value, ptr %ptr) {
276; CHECK-LABEL: store_atomic_i64_unaligned_seq_cst:
277; CHECK:    bl __atomic_store
278    store atomic i64 %value, ptr %ptr seq_cst, align 1
279    ret void
280}
281
282define dso_local void @store_atomic_i128_unaligned_unordered(i128 %value, ptr %ptr) {
283; CHECK-LABEL: store_atomic_i128_unaligned_unordered:
284; CHECK:    bl __atomic_store
285    store atomic i128 %value, ptr %ptr unordered, align 1
286    ret void
287}
288
289define dso_local void @store_atomic_i128_unaligned_monotonic(i128 %value, ptr %ptr) {
290; CHECK-LABEL: store_atomic_i128_unaligned_monotonic:
291; CHECK:    bl __atomic_store
292    store atomic i128 %value, ptr %ptr monotonic, align 1
293    ret void
294}
295
296define dso_local void @store_atomic_i128_unaligned_release(i128 %value, ptr %ptr) {
297; CHECK-LABEL: store_atomic_i128_unaligned_release:
298; CHECK:    bl __atomic_store
299    store atomic i128 %value, ptr %ptr release, align 1
300    ret void
301}
302
303define dso_local void @store_atomic_i128_unaligned_seq_cst(i128 %value, ptr %ptr) {
304; CHECK-LABEL: store_atomic_i128_unaligned_seq_cst:
305; CHECK:    bl __atomic_store
306    store atomic i128 %value, ptr %ptr seq_cst, align 1
307    ret void
308}
309