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