xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomic-store-rcpc3.ll (revision 7c84f94eb9f9c39229ca26d21d3bcb0b35efdc71)
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 -mattr=+lse2,+rcpc3 -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2,+rcpc3 -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; CHECK-LABEL: store_atomic_i128_aligned_unordered:
120; CHECK:    stp x0, x1, [x2]
121    store atomic i128 %value, ptr %ptr unordered, align 16
122    ret void
123}
124
125define dso_local void @store_atomic_i128_aligned_monotonic(i128 %value, ptr %ptr) {
126; CHECK-LABEL: store_atomic_i128_aligned_monotonic:
127; CHECK:    stp x0, x1, [x2]
128    store atomic i128 %value, ptr %ptr monotonic, align 16
129    ret void
130}
131
132define dso_local void @store_atomic_i128_aligned_release(i128 %value, ptr %ptr) {
133; CHECK-LABEL: store_atomic_i128_aligned_release:
134; CHECK:    stilp x0, x1, [x2]
135    store atomic i128 %value, ptr %ptr release, align 16
136    ret void
137}
138
139define dso_local void @store_atomic_i128_aligned_seq_cst(i128 %value, ptr %ptr) {
140; CHECK-LABEL: store_atomic_i128_aligned_seq_cst:
141; CHECK:    dmb ish
142; CHECK:    stp x0, x1, [x2]
143; CHECK:    dmb ish
144    store atomic i128 %value, ptr %ptr seq_cst, align 16
145    ret void
146}
147
148define dso_local void @store_atomic_i8_unaligned_unordered(i8 %value, ptr %ptr) {
149; CHECK-LABEL: store_atomic_i8_unaligned_unordered:
150; CHECK:    strb w0, [x1]
151    store atomic i8 %value, ptr %ptr unordered, align 1
152    ret void
153}
154
155define dso_local void @store_atomic_i8_unaligned_monotonic(i8 %value, ptr %ptr) {
156; CHECK-LABEL: store_atomic_i8_unaligned_monotonic:
157; CHECK:    strb w0, [x1]
158    store atomic i8 %value, ptr %ptr monotonic, align 1
159    ret void
160}
161
162define dso_local void @store_atomic_i8_unaligned_release(i8 %value, ptr %ptr) {
163; CHECK-LABEL: store_atomic_i8_unaligned_release:
164; CHECK:    stlrb w0, [x1]
165    store atomic i8 %value, ptr %ptr release, align 1
166    ret void
167}
168
169define dso_local void @store_atomic_i8_unaligned_seq_cst(i8 %value, ptr %ptr) {
170; CHECK-LABEL: store_atomic_i8_unaligned_seq_cst:
171; CHECK:    stlrb w0, [x1]
172    store atomic i8 %value, ptr %ptr seq_cst, align 1
173    ret void
174}
175
176define dso_local void @store_atomic_i16_unaligned_unordered(i16 %value, ptr %ptr) {
177; CHECK-LABEL: store_atomic_i16_unaligned_unordered:
178; CHECK:    bl __atomic_store
179    store atomic i16 %value, ptr %ptr unordered, align 1
180    ret void
181}
182
183define dso_local void @store_atomic_i16_unaligned_monotonic(i16 %value, ptr %ptr) {
184; CHECK-LABEL: store_atomic_i16_unaligned_monotonic:
185; CHECK:    bl __atomic_store
186    store atomic i16 %value, ptr %ptr monotonic, align 1
187    ret void
188}
189
190define dso_local void @store_atomic_i16_unaligned_release(i16 %value, ptr %ptr) {
191; CHECK-LABEL: store_atomic_i16_unaligned_release:
192; CHECK:    bl __atomic_store
193    store atomic i16 %value, ptr %ptr release, align 1
194    ret void
195}
196
197define dso_local void @store_atomic_i16_unaligned_seq_cst(i16 %value, ptr %ptr) {
198; CHECK-LABEL: store_atomic_i16_unaligned_seq_cst:
199; CHECK:    bl __atomic_store
200    store atomic i16 %value, ptr %ptr seq_cst, align 1
201    ret void
202}
203
204define dso_local void @store_atomic_i32_unaligned_unordered(i32 %value, ptr %ptr) {
205; CHECK-LABEL: store_atomic_i32_unaligned_unordered:
206; CHECK:    bl __atomic_store
207    store atomic i32 %value, ptr %ptr unordered, align 1
208    ret void
209}
210
211define dso_local void @store_atomic_i32_unaligned_monotonic(i32 %value, ptr %ptr) {
212; CHECK-LABEL: store_atomic_i32_unaligned_monotonic:
213; CHECK:    bl __atomic_store
214    store atomic i32 %value, ptr %ptr monotonic, align 1
215    ret void
216}
217
218define dso_local void @store_atomic_i32_unaligned_release(i32 %value, ptr %ptr) {
219; CHECK-LABEL: store_atomic_i32_unaligned_release:
220; CHECK:    bl __atomic_store
221    store atomic i32 %value, ptr %ptr release, align 1
222    ret void
223}
224
225define dso_local void @store_atomic_i32_unaligned_seq_cst(i32 %value, ptr %ptr) {
226; CHECK-LABEL: store_atomic_i32_unaligned_seq_cst:
227; CHECK:    bl __atomic_store
228    store atomic i32 %value, ptr %ptr seq_cst, align 1
229    ret void
230}
231
232define dso_local void @store_atomic_i64_unaligned_unordered(i64 %value, ptr %ptr) {
233; CHECK-LABEL: store_atomic_i64_unaligned_unordered:
234; CHECK:    bl __atomic_store
235    store atomic i64 %value, ptr %ptr unordered, align 1
236    ret void
237}
238
239define dso_local void @store_atomic_i64_unaligned_monotonic(i64 %value, ptr %ptr) {
240; CHECK-LABEL: store_atomic_i64_unaligned_monotonic:
241; CHECK:    bl __atomic_store
242    store atomic i64 %value, ptr %ptr monotonic, align 1
243    ret void
244}
245
246define dso_local void @store_atomic_i64_unaligned_release(i64 %value, ptr %ptr) {
247; CHECK-LABEL: store_atomic_i64_unaligned_release:
248; CHECK:    bl __atomic_store
249    store atomic i64 %value, ptr %ptr release, align 1
250    ret void
251}
252
253define dso_local void @store_atomic_i64_unaligned_seq_cst(i64 %value, ptr %ptr) {
254; CHECK-LABEL: store_atomic_i64_unaligned_seq_cst:
255; CHECK:    bl __atomic_store
256    store atomic i64 %value, ptr %ptr seq_cst, align 1
257    ret void
258}
259
260define dso_local void @store_atomic_i128_unaligned_unordered(i128 %value, ptr %ptr) {
261; CHECK-LABEL: store_atomic_i128_unaligned_unordered:
262; CHECK:    bl __atomic_store
263    store atomic i128 %value, ptr %ptr unordered, align 1
264    ret void
265}
266
267define dso_local void @store_atomic_i128_unaligned_monotonic(i128 %value, ptr %ptr) {
268; CHECK-LABEL: store_atomic_i128_unaligned_monotonic:
269; CHECK:    bl __atomic_store
270    store atomic i128 %value, ptr %ptr monotonic, align 1
271    ret void
272}
273
274define dso_local void @store_atomic_i128_unaligned_release(i128 %value, ptr %ptr) {
275; CHECK-LABEL: store_atomic_i128_unaligned_release:
276; CHECK:    bl __atomic_store
277    store atomic i128 %value, ptr %ptr release, align 1
278    ret void
279}
280
281define dso_local void @store_atomic_i128_unaligned_seq_cst(i128 %value, ptr %ptr) {
282; CHECK-LABEL: store_atomic_i128_unaligned_seq_cst:
283; CHECK:    bl __atomic_store
284    store atomic i128 %value, ptr %ptr seq_cst, align 1
285    ret void
286}
287;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
288; -O0: {{.*}}
289; -O1: {{.*}}
290