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=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4 ; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+outline-atomics -O1 | FileCheck %s --check-prefixes=CHECK,-O1
6 define dso_local void @store_atomic_i8_aligned_unordered(i8 %value, ptr %ptr) {
7 ; CHECK-LABEL: store_atomic_i8_aligned_unordered:
9 store atomic i8 %value, ptr %ptr unordered, align 1
13 define 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
20 define 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
27 define 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
34 define 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
41 define 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
48 define 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
55 define 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
62 define dso_local void @store_atomic_i32_aligned_unordered(i32 %value, ptr %ptr) {
63 ; CHECK-LABEL: store_atomic_i32_aligned_unordered:
65 store atomic i32 %value, ptr %ptr unordered, align 4
69 define dso_local void @store_atomic_i32_aligned_monotonic(i32 %value, ptr %ptr) {
70 ; CHECK-LABEL: store_atomic_i32_aligned_monotonic:
72 store atomic i32 %value, ptr %ptr monotonic, align 4
76 define 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
83 define 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
90 define dso_local void @store_atomic_i64_aligned_unordered(i64 %value, ptr %ptr) {
91 ; CHECK-LABEL: store_atomic_i64_aligned_unordered:
93 store atomic i64 %value, ptr %ptr unordered, align 8
97 define dso_local void @store_atomic_i64_aligned_monotonic(i64 %value, ptr %ptr) {
98 ; CHECK-LABEL: store_atomic_i64_aligned_monotonic:
100 store atomic i64 %value, ptr %ptr monotonic, align 8
104 define 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
111 define 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
118 define dso_local void @store_atomic_i128_aligned_unordered(i128 %value, ptr %ptr) {
119 ; -O0-LABEL: store_atomic_i128_aligned_unordered:
120 ; -O0: ldxp x10, x9, [x11]
123 ; -O0: stxp w8, x14, x15, [x11]
124 ; -O0: stxp w8, x10, x9, [x11]
125 ; -O0: eor x8, x10, x8
126 ; -O0: eor x11, x9, x11
127 ; -O0: orr x8, x8, x11
128 ; -O0: subs x8, x8, #0
130 ; -O1-LABEL: store_atomic_i128_aligned_unordered:
131 ; -O1: ldxp xzr, x8, [x2]
132 ; -O1: stxp w8, x0, x1, [x2]
133 store atomic i128 %value, ptr %ptr unordered, align 16
137 define dso_local void @store_atomic_i128_aligned_monotonic(i128 %value, ptr %ptr) {
138 ; -O0-LABEL: store_atomic_i128_aligned_monotonic:
139 ; -O0: ldxp x10, x9, [x11]
142 ; -O0: stxp w8, x14, x15, [x11]
143 ; -O0: stxp w8, x10, x9, [x11]
144 ; -O0: eor x8, x10, x8
145 ; -O0: eor x11, x9, x11
146 ; -O0: orr x8, x8, x11
147 ; -O0: subs x8, x8, #0
149 ; -O1-LABEL: store_atomic_i128_aligned_monotonic:
150 ; -O1: ldxp xzr, x8, [x2]
151 ; -O1: stxp w8, x0, x1, [x2]
152 store atomic i128 %value, ptr %ptr monotonic, align 16
156 define dso_local void @store_atomic_i128_aligned_release(i128 %value, ptr %ptr) {
157 ; -O0-LABEL: store_atomic_i128_aligned_release:
158 ; -O0: ldxp x10, x9, [x11]
161 ; -O0: stlxp w8, x14, x15, [x11]
162 ; -O0: stlxp w8, x10, x9, [x11]
163 ; -O0: eor x8, x10, x8
164 ; -O0: eor x11, x9, x11
165 ; -O0: orr x8, x8, x11
166 ; -O0: subs x8, x8, #0
168 ; -O1-LABEL: store_atomic_i128_aligned_release:
169 ; -O1: ldxp xzr, x8, [x2]
170 ; -O1: stlxp w8, x0, x1, [x2]
171 store atomic i128 %value, ptr %ptr release, align 16
175 define dso_local void @store_atomic_i128_aligned_seq_cst(i128 %value, ptr %ptr) {
176 ; -O0-LABEL: store_atomic_i128_aligned_seq_cst:
177 ; -O0: ldaxp x10, x9, [x11]
180 ; -O0: stlxp w8, x14, x15, [x11]
181 ; -O0: stlxp w8, x10, x9, [x11]
182 ; -O0: eor x8, x10, x8
183 ; -O0: eor x11, x9, x11
184 ; -O0: orr x8, x8, x11
185 ; -O0: subs x8, x8, #0
187 ; -O1-LABEL: store_atomic_i128_aligned_seq_cst:
188 ; -O1: ldaxp xzr, x8, [x2]
189 ; -O1: stlxp w8, x0, x1, [x2]
190 store atomic i128 %value, ptr %ptr seq_cst, align 16
194 define dso_local void @store_atomic_i8_unaligned_unordered(i8 %value, ptr %ptr) {
195 ; CHECK-LABEL: store_atomic_i8_unaligned_unordered:
196 ; CHECK: strb w0, [x1]
197 store atomic i8 %value, ptr %ptr unordered, align 1
201 define dso_local void @store_atomic_i8_unaligned_monotonic(i8 %value, ptr %ptr) {
202 ; CHECK-LABEL: store_atomic_i8_unaligned_monotonic:
203 ; CHECK: strb w0, [x1]
204 store atomic i8 %value, ptr %ptr monotonic, align 1
208 define dso_local void @store_atomic_i8_unaligned_release(i8 %value, ptr %ptr) {
209 ; CHECK-LABEL: store_atomic_i8_unaligned_release:
210 ; CHECK: stlrb w0, [x1]
211 store atomic i8 %value, ptr %ptr release, align 1
215 define dso_local void @store_atomic_i8_unaligned_seq_cst(i8 %value, ptr %ptr) {
216 ; CHECK-LABEL: store_atomic_i8_unaligned_seq_cst:
217 ; CHECK: stlrb w0, [x1]
218 store atomic i8 %value, ptr %ptr seq_cst, align 1
222 define dso_local void @store_atomic_i16_unaligned_unordered(i16 %value, ptr %ptr) {
223 ; CHECK-LABEL: store_atomic_i16_unaligned_unordered:
224 ; CHECK: bl __atomic_store
225 store atomic i16 %value, ptr %ptr unordered, align 1
229 define dso_local void @store_atomic_i16_unaligned_monotonic(i16 %value, ptr %ptr) {
230 ; CHECK-LABEL: store_atomic_i16_unaligned_monotonic:
231 ; CHECK: bl __atomic_store
232 store atomic i16 %value, ptr %ptr monotonic, align 1
236 define dso_local void @store_atomic_i16_unaligned_release(i16 %value, ptr %ptr) {
237 ; CHECK-LABEL: store_atomic_i16_unaligned_release:
238 ; CHECK: bl __atomic_store
239 store atomic i16 %value, ptr %ptr release, align 1
243 define dso_local void @store_atomic_i16_unaligned_seq_cst(i16 %value, ptr %ptr) {
244 ; CHECK-LABEL: store_atomic_i16_unaligned_seq_cst:
245 ; CHECK: bl __atomic_store
246 store atomic i16 %value, ptr %ptr seq_cst, align 1
250 define dso_local void @store_atomic_i32_unaligned_unordered(i32 %value, ptr %ptr) {
251 ; CHECK-LABEL: store_atomic_i32_unaligned_unordered:
252 ; CHECK: bl __atomic_store
253 store atomic i32 %value, ptr %ptr unordered, align 1
257 define dso_local void @store_atomic_i32_unaligned_monotonic(i32 %value, ptr %ptr) {
258 ; CHECK-LABEL: store_atomic_i32_unaligned_monotonic:
259 ; CHECK: bl __atomic_store
260 store atomic i32 %value, ptr %ptr monotonic, align 1
264 define dso_local void @store_atomic_i32_unaligned_release(i32 %value, ptr %ptr) {
265 ; CHECK-LABEL: store_atomic_i32_unaligned_release:
266 ; CHECK: bl __atomic_store
267 store atomic i32 %value, ptr %ptr release, align 1
271 define dso_local void @store_atomic_i32_unaligned_seq_cst(i32 %value, ptr %ptr) {
272 ; CHECK-LABEL: store_atomic_i32_unaligned_seq_cst:
273 ; CHECK: bl __atomic_store
274 store atomic i32 %value, ptr %ptr seq_cst, align 1
278 define dso_local void @store_atomic_i64_unaligned_unordered(i64 %value, ptr %ptr) {
279 ; CHECK-LABEL: store_atomic_i64_unaligned_unordered:
280 ; CHECK: bl __atomic_store
281 store atomic i64 %value, ptr %ptr unordered, align 1
285 define dso_local void @store_atomic_i64_unaligned_monotonic(i64 %value, ptr %ptr) {
286 ; CHECK-LABEL: store_atomic_i64_unaligned_monotonic:
287 ; CHECK: bl __atomic_store
288 store atomic i64 %value, ptr %ptr monotonic, align 1
292 define dso_local void @store_atomic_i64_unaligned_release(i64 %value, ptr %ptr) {
293 ; CHECK-LABEL: store_atomic_i64_unaligned_release:
294 ; CHECK: bl __atomic_store
295 store atomic i64 %value, ptr %ptr release, align 1
299 define dso_local void @store_atomic_i64_unaligned_seq_cst(i64 %value, ptr %ptr) {
300 ; CHECK-LABEL: store_atomic_i64_unaligned_seq_cst:
301 ; CHECK: bl __atomic_store
302 store atomic i64 %value, ptr %ptr seq_cst, align 1
306 define dso_local void @store_atomic_i128_unaligned_unordered(i128 %value, ptr %ptr) {
307 ; CHECK-LABEL: store_atomic_i128_unaligned_unordered:
308 ; CHECK: bl __atomic_store
309 store atomic i128 %value, ptr %ptr unordered, align 1
313 define dso_local void @store_atomic_i128_unaligned_monotonic(i128 %value, ptr %ptr) {
314 ; CHECK-LABEL: store_atomic_i128_unaligned_monotonic:
315 ; CHECK: bl __atomic_store
316 store atomic i128 %value, ptr %ptr monotonic, align 1
320 define dso_local void @store_atomic_i128_unaligned_release(i128 %value, ptr %ptr) {
321 ; CHECK-LABEL: store_atomic_i128_unaligned_release:
322 ; CHECK: bl __atomic_store
323 store atomic i128 %value, ptr %ptr release, align 1
327 define dso_local void @store_atomic_i128_unaligned_seq_cst(i128 %value, ptr %ptr) {
328 ; CHECK-LABEL: store_atomic_i128_unaligned_seq_cst:
329 ; CHECK: bl __atomic_store
330 store atomic i128 %value, ptr %ptr seq_cst, align 1