[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / Atomics / aarch64-cmpxchg-v8_1a.ll
blob8d303f76971039571105c1317c62d21035bc34b5
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[^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=+v8.1a -O0 | FileCheck %s --check-prefixes=CHECK,-O0
4 ; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8.1a -O1 | FileCheck %s --check-prefixes=CHECK,-O1
6 define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {
7 ; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic:
8 ; CHECK:    casb w0, w1, [x2]
9     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
10     %r = extractvalue { i8, i1 } %pair, 0
11     ret i8 %r
14 define dso_local i8 @cmpxchg_i8_aligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
15 ; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_monotonic_weak:
16 ; CHECK:    casb w0, w1, [x2]
17     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
18     %r = extractvalue { i8, i1 } %pair, 0
19     ret i8 %r
22 define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {
23 ; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire:
24 ; CHECK:    casab w0, w1, [x2]
25     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
26     %r = extractvalue { i8, i1 } %pair, 0
27     ret i8 %r
30 define dso_local i8 @cmpxchg_i8_aligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
31 ; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_acquire_weak:
32 ; CHECK:    casab w0, w1, [x2]
33     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
34     %r = extractvalue { i8, i1 } %pair, 0
35     ret i8 %r
38 define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
39 ; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst:
40 ; CHECK:    casalb w0, w1, [x2]
41     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
42     %r = extractvalue { i8, i1 } %pair, 0
43     ret i8 %r
46 define dso_local i8 @cmpxchg_i8_aligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
47 ; CHECK-LABEL: cmpxchg_i8_aligned_monotonic_seq_cst_weak:
48 ; CHECK:    casalb w0, w1, [x2]
49     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
50     %r = extractvalue { i8, i1 } %pair, 0
51     ret i8 %r
54 define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {
55 ; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic:
56 ; CHECK:    casab w0, w1, [x2]
57     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
58     %r = extractvalue { i8, i1 } %pair, 0
59     ret i8 %r
62 define dso_local i8 @cmpxchg_i8_aligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
63 ; CHECK-LABEL: cmpxchg_i8_aligned_acquire_monotonic_weak:
64 ; CHECK:    casab w0, w1, [x2]
65     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
66     %r = extractvalue { i8, i1 } %pair, 0
67     ret i8 %r
70 define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {
71 ; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire:
72 ; CHECK:    casab w0, w1, [x2]
73     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
74     %r = extractvalue { i8, i1 } %pair, 0
75     ret i8 %r
78 define dso_local i8 @cmpxchg_i8_aligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
79 ; CHECK-LABEL: cmpxchg_i8_aligned_acquire_acquire_weak:
80 ; CHECK:    casab w0, w1, [x2]
81     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
82     %r = extractvalue { i8, i1 } %pair, 0
83     ret i8 %r
86 define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
87 ; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst:
88 ; CHECK:    casalb w0, w1, [x2]
89     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
90     %r = extractvalue { i8, i1 } %pair, 0
91     ret i8 %r
94 define dso_local i8 @cmpxchg_i8_aligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
95 ; CHECK-LABEL: cmpxchg_i8_aligned_acquire_seq_cst_weak:
96 ; CHECK:    casalb w0, w1, [x2]
97     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
98     %r = extractvalue { i8, i1 } %pair, 0
99     ret i8 %r
102 define dso_local i8 @cmpxchg_i8_aligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {
103 ; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic:
104 ; CHECK:    caslb w0, w1, [x2]
105     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
106     %r = extractvalue { i8, i1 } %pair, 0
107     ret i8 %r
110 define dso_local i8 @cmpxchg_i8_aligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
111 ; CHECK-LABEL: cmpxchg_i8_aligned_release_monotonic_weak:
112 ; CHECK:    caslb w0, w1, [x2]
113     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
114     %r = extractvalue { i8, i1 } %pair, 0
115     ret i8 %r
118 define dso_local i8 @cmpxchg_i8_aligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {
119 ; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire:
120 ; CHECK:    casalb w0, w1, [x2]
121     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1
122     %r = extractvalue { i8, i1 } %pair, 0
123     ret i8 %r
126 define dso_local i8 @cmpxchg_i8_aligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
127 ; CHECK-LABEL: cmpxchg_i8_aligned_release_acquire_weak:
128 ; CHECK:    casalb w0, w1, [x2]
129     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1
130     %r = extractvalue { i8, i1 } %pair, 0
131     ret i8 %r
134 define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
135 ; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst:
136 ; CHECK:    casalb w0, w1, [x2]
137     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
138     %r = extractvalue { i8, i1 } %pair, 0
139     ret i8 %r
142 define dso_local i8 @cmpxchg_i8_aligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
143 ; CHECK-LABEL: cmpxchg_i8_aligned_release_seq_cst_weak:
144 ; CHECK:    casalb w0, w1, [x2]
145     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
146     %r = extractvalue { i8, i1 } %pair, 0
147     ret i8 %r
150 define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {
151 ; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic:
152 ; CHECK:    casalb w0, w1, [x2]
153     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
154     %r = extractvalue { i8, i1 } %pair, 0
155     ret i8 %r
158 define dso_local i8 @cmpxchg_i8_aligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
159 ; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_monotonic_weak:
160 ; CHECK:    casalb w0, w1, [x2]
161     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
162     %r = extractvalue { i8, i1 } %pair, 0
163     ret i8 %r
166 define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {
167 ; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire:
168 ; CHECK:    casalb w0, w1, [x2]
169     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
170     %r = extractvalue { i8, i1 } %pair, 0
171     ret i8 %r
174 define dso_local i8 @cmpxchg_i8_aligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
175 ; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_acquire_weak:
176 ; CHECK:    casalb w0, w1, [x2]
177     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
178     %r = extractvalue { i8, i1 } %pair, 0
179     ret i8 %r
182 define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
183 ; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst:
184 ; CHECK:    casalb w0, w1, [x2]
185     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
186     %r = extractvalue { i8, i1 } %pair, 0
187     ret i8 %r
190 define dso_local i8 @cmpxchg_i8_aligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
191 ; CHECK-LABEL: cmpxchg_i8_aligned_acq_rel_seq_cst_weak:
192 ; CHECK:    casalb w0, w1, [x2]
193     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
194     %r = extractvalue { i8, i1 } %pair, 0
195     ret i8 %r
198 define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {
199 ; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic:
200 ; CHECK:    casalb w0, w1, [x2]
201     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
202     %r = extractvalue { i8, i1 } %pair, 0
203     ret i8 %r
206 define dso_local i8 @cmpxchg_i8_aligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
207 ; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_monotonic_weak:
208 ; CHECK:    casalb w0, w1, [x2]
209     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
210     %r = extractvalue { i8, i1 } %pair, 0
211     ret i8 %r
214 define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {
215 ; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire:
216 ; CHECK:    casalb w0, w1, [x2]
217     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
218     %r = extractvalue { i8, i1 } %pair, 0
219     ret i8 %r
222 define dso_local i8 @cmpxchg_i8_aligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
223 ; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_acquire_weak:
224 ; CHECK:    casalb w0, w1, [x2]
225     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
226     %r = extractvalue { i8, i1 } %pair, 0
227     ret i8 %r
230 define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
231 ; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst:
232 ; CHECK:    casalb w0, w1, [x2]
233     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
234     %r = extractvalue { i8, i1 } %pair, 0
235     ret i8 %r
238 define dso_local i8 @cmpxchg_i8_aligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
239 ; CHECK-LABEL: cmpxchg_i8_aligned_seq_cst_seq_cst_weak:
240 ; CHECK:    casalb w0, w1, [x2]
241     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
242     %r = extractvalue { i8, i1 } %pair, 0
243     ret i8 %r
246 define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {
247 ; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic:
248 ; CHECK:    cash w0, w1, [x2]
249     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2
250     %r = extractvalue { i16, i1 } %pair, 0
251     ret i16 %r
254 define dso_local i16 @cmpxchg_i16_aligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
255 ; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_monotonic_weak:
256 ; CHECK:    cash w0, w1, [x2]
257     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 2
258     %r = extractvalue { i16, i1 } %pair, 0
259     ret i16 %r
262 define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {
263 ; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire:
264 ; CHECK:    casah w0, w1, [x2]
265     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2
266     %r = extractvalue { i16, i1 } %pair, 0
267     ret i16 %r
270 define dso_local i16 @cmpxchg_i16_aligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
271 ; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_acquire_weak:
272 ; CHECK:    casah w0, w1, [x2]
273     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 2
274     %r = extractvalue { i16, i1 } %pair, 0
275     ret i16 %r
278 define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
279 ; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst:
280 ; CHECK:    casalh w0, w1, [x2]
281     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2
282     %r = extractvalue { i16, i1 } %pair, 0
283     ret i16 %r
286 define dso_local i16 @cmpxchg_i16_aligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
287 ; CHECK-LABEL: cmpxchg_i16_aligned_monotonic_seq_cst_weak:
288 ; CHECK:    casalh w0, w1, [x2]
289     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 2
290     %r = extractvalue { i16, i1 } %pair, 0
291     ret i16 %r
294 define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {
295 ; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic:
296 ; CHECK:    casah w0, w1, [x2]
297     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2
298     %r = extractvalue { i16, i1 } %pair, 0
299     ret i16 %r
302 define dso_local i16 @cmpxchg_i16_aligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
303 ; CHECK-LABEL: cmpxchg_i16_aligned_acquire_monotonic_weak:
304 ; CHECK:    casah w0, w1, [x2]
305     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 2
306     %r = extractvalue { i16, i1 } %pair, 0
307     ret i16 %r
310 define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {
311 ; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire:
312 ; CHECK:    casah w0, w1, [x2]
313     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2
314     %r = extractvalue { i16, i1 } %pair, 0
315     ret i16 %r
318 define dso_local i16 @cmpxchg_i16_aligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
319 ; CHECK-LABEL: cmpxchg_i16_aligned_acquire_acquire_weak:
320 ; CHECK:    casah w0, w1, [x2]
321     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 2
322     %r = extractvalue { i16, i1 } %pair, 0
323     ret i16 %r
326 define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
327 ; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst:
328 ; CHECK:    casalh w0, w1, [x2]
329     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2
330     %r = extractvalue { i16, i1 } %pair, 0
331     ret i16 %r
334 define dso_local i16 @cmpxchg_i16_aligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
335 ; CHECK-LABEL: cmpxchg_i16_aligned_acquire_seq_cst_weak:
336 ; CHECK:    casalh w0, w1, [x2]
337     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 2
338     %r = extractvalue { i16, i1 } %pair, 0
339     ret i16 %r
342 define dso_local i16 @cmpxchg_i16_aligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {
343 ; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic:
344 ; CHECK:    caslh w0, w1, [x2]
345     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 2
346     %r = extractvalue { i16, i1 } %pair, 0
347     ret i16 %r
350 define dso_local i16 @cmpxchg_i16_aligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
351 ; CHECK-LABEL: cmpxchg_i16_aligned_release_monotonic_weak:
352 ; CHECK:    caslh w0, w1, [x2]
353     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 2
354     %r = extractvalue { i16, i1 } %pair, 0
355     ret i16 %r
358 define dso_local i16 @cmpxchg_i16_aligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {
359 ; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire:
360 ; CHECK:    casalh w0, w1, [x2]
361     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 2
362     %r = extractvalue { i16, i1 } %pair, 0
363     ret i16 %r
366 define dso_local i16 @cmpxchg_i16_aligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
367 ; CHECK-LABEL: cmpxchg_i16_aligned_release_acquire_weak:
368 ; CHECK:    casalh w0, w1, [x2]
369     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 2
370     %r = extractvalue { i16, i1 } %pair, 0
371     ret i16 %r
374 define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
375 ; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst:
376 ; CHECK:    casalh w0, w1, [x2]
377     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2
378     %r = extractvalue { i16, i1 } %pair, 0
379     ret i16 %r
382 define dso_local i16 @cmpxchg_i16_aligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
383 ; CHECK-LABEL: cmpxchg_i16_aligned_release_seq_cst_weak:
384 ; CHECK:    casalh w0, w1, [x2]
385     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 2
386     %r = extractvalue { i16, i1 } %pair, 0
387     ret i16 %r
390 define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {
391 ; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic:
392 ; CHECK:    casalh w0, w1, [x2]
393     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2
394     %r = extractvalue { i16, i1 } %pair, 0
395     ret i16 %r
398 define dso_local i16 @cmpxchg_i16_aligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
399 ; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_monotonic_weak:
400 ; CHECK:    casalh w0, w1, [x2]
401     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 2
402     %r = extractvalue { i16, i1 } %pair, 0
403     ret i16 %r
406 define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {
407 ; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire:
408 ; CHECK:    casalh w0, w1, [x2]
409     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2
410     %r = extractvalue { i16, i1 } %pair, 0
411     ret i16 %r
414 define dso_local i16 @cmpxchg_i16_aligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
415 ; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_acquire_weak:
416 ; CHECK:    casalh w0, w1, [x2]
417     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 2
418     %r = extractvalue { i16, i1 } %pair, 0
419     ret i16 %r
422 define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
423 ; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst:
424 ; CHECK:    casalh w0, w1, [x2]
425     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2
426     %r = extractvalue { i16, i1 } %pair, 0
427     ret i16 %r
430 define dso_local i16 @cmpxchg_i16_aligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
431 ; CHECK-LABEL: cmpxchg_i16_aligned_acq_rel_seq_cst_weak:
432 ; CHECK:    casalh w0, w1, [x2]
433     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 2
434     %r = extractvalue { i16, i1 } %pair, 0
435     ret i16 %r
438 define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {
439 ; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic:
440 ; CHECK:    casalh w0, w1, [x2]
441     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2
442     %r = extractvalue { i16, i1 } %pair, 0
443     ret i16 %r
446 define dso_local i16 @cmpxchg_i16_aligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
447 ; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_monotonic_weak:
448 ; CHECK:    casalh w0, w1, [x2]
449     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 2
450     %r = extractvalue { i16, i1 } %pair, 0
451     ret i16 %r
454 define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {
455 ; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire:
456 ; CHECK:    casalh w0, w1, [x2]
457     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2
458     %r = extractvalue { i16, i1 } %pair, 0
459     ret i16 %r
462 define dso_local i16 @cmpxchg_i16_aligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
463 ; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_acquire_weak:
464 ; CHECK:    casalh w0, w1, [x2]
465     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 2
466     %r = extractvalue { i16, i1 } %pair, 0
467     ret i16 %r
470 define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
471 ; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst:
472 ; CHECK:    casalh w0, w1, [x2]
473     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2
474     %r = extractvalue { i16, i1 } %pair, 0
475     ret i16 %r
478 define dso_local i16 @cmpxchg_i16_aligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
479 ; CHECK-LABEL: cmpxchg_i16_aligned_seq_cst_seq_cst_weak:
480 ; CHECK:    casalh w0, w1, [x2]
481     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 2
482     %r = extractvalue { i16, i1 } %pair, 0
483     ret i16 %r
486 define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {
487 ; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic:
488 ; CHECK:    cas w0, w1, [x2]
489     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4
490     %r = extractvalue { i32, i1 } %pair, 0
491     ret i32 %r
494 define dso_local i32 @cmpxchg_i32_aligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
495 ; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_monotonic_weak:
496 ; CHECK:    cas w0, w1, [x2]
497     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 4
498     %r = extractvalue { i32, i1 } %pair, 0
499     ret i32 %r
502 define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {
503 ; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire:
504 ; CHECK:    casa w0, w1, [x2]
505     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4
506     %r = extractvalue { i32, i1 } %pair, 0
507     ret i32 %r
510 define dso_local i32 @cmpxchg_i32_aligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
511 ; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_acquire_weak:
512 ; CHECK:    casa w0, w1, [x2]
513     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 4
514     %r = extractvalue { i32, i1 } %pair, 0
515     ret i32 %r
518 define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
519 ; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst:
520 ; CHECK:    casal w0, w1, [x2]
521     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4
522     %r = extractvalue { i32, i1 } %pair, 0
523     ret i32 %r
526 define dso_local i32 @cmpxchg_i32_aligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
527 ; CHECK-LABEL: cmpxchg_i32_aligned_monotonic_seq_cst_weak:
528 ; CHECK:    casal w0, w1, [x2]
529     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 4
530     %r = extractvalue { i32, i1 } %pair, 0
531     ret i32 %r
534 define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {
535 ; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic:
536 ; CHECK:    casa w0, w1, [x2]
537     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4
538     %r = extractvalue { i32, i1 } %pair, 0
539     ret i32 %r
542 define dso_local i32 @cmpxchg_i32_aligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
543 ; CHECK-LABEL: cmpxchg_i32_aligned_acquire_monotonic_weak:
544 ; CHECK:    casa w0, w1, [x2]
545     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 4
546     %r = extractvalue { i32, i1 } %pair, 0
547     ret i32 %r
550 define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {
551 ; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire:
552 ; CHECK:    casa w0, w1, [x2]
553     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4
554     %r = extractvalue { i32, i1 } %pair, 0
555     ret i32 %r
558 define dso_local i32 @cmpxchg_i32_aligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
559 ; CHECK-LABEL: cmpxchg_i32_aligned_acquire_acquire_weak:
560 ; CHECK:    casa w0, w1, [x2]
561     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 4
562     %r = extractvalue { i32, i1 } %pair, 0
563     ret i32 %r
566 define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
567 ; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst:
568 ; CHECK:    casal w0, w1, [x2]
569     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4
570     %r = extractvalue { i32, i1 } %pair, 0
571     ret i32 %r
574 define dso_local i32 @cmpxchg_i32_aligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
575 ; CHECK-LABEL: cmpxchg_i32_aligned_acquire_seq_cst_weak:
576 ; CHECK:    casal w0, w1, [x2]
577     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 4
578     %r = extractvalue { i32, i1 } %pair, 0
579     ret i32 %r
582 define dso_local i32 @cmpxchg_i32_aligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {
583 ; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic:
584 ; CHECK:    casl w0, w1, [x2]
585     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 4
586     %r = extractvalue { i32, i1 } %pair, 0
587     ret i32 %r
590 define dso_local i32 @cmpxchg_i32_aligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
591 ; CHECK-LABEL: cmpxchg_i32_aligned_release_monotonic_weak:
592 ; CHECK:    casl w0, w1, [x2]
593     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 4
594     %r = extractvalue { i32, i1 } %pair, 0
595     ret i32 %r
598 define dso_local i32 @cmpxchg_i32_aligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {
599 ; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire:
600 ; CHECK:    casal w0, w1, [x2]
601     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 4
602     %r = extractvalue { i32, i1 } %pair, 0
603     ret i32 %r
606 define dso_local i32 @cmpxchg_i32_aligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
607 ; CHECK-LABEL: cmpxchg_i32_aligned_release_acquire_weak:
608 ; CHECK:    casal w0, w1, [x2]
609     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 4
610     %r = extractvalue { i32, i1 } %pair, 0
611     ret i32 %r
614 define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
615 ; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst:
616 ; CHECK:    casal w0, w1, [x2]
617     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4
618     %r = extractvalue { i32, i1 } %pair, 0
619     ret i32 %r
622 define dso_local i32 @cmpxchg_i32_aligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
623 ; CHECK-LABEL: cmpxchg_i32_aligned_release_seq_cst_weak:
624 ; CHECK:    casal w0, w1, [x2]
625     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 4
626     %r = extractvalue { i32, i1 } %pair, 0
627     ret i32 %r
630 define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {
631 ; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic:
632 ; CHECK:    casal w0, w1, [x2]
633     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4
634     %r = extractvalue { i32, i1 } %pair, 0
635     ret i32 %r
638 define dso_local i32 @cmpxchg_i32_aligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
639 ; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_monotonic_weak:
640 ; CHECK:    casal w0, w1, [x2]
641     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 4
642     %r = extractvalue { i32, i1 } %pair, 0
643     ret i32 %r
646 define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {
647 ; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire:
648 ; CHECK:    casal w0, w1, [x2]
649     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4
650     %r = extractvalue { i32, i1 } %pair, 0
651     ret i32 %r
654 define dso_local i32 @cmpxchg_i32_aligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
655 ; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_acquire_weak:
656 ; CHECK:    casal w0, w1, [x2]
657     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 4
658     %r = extractvalue { i32, i1 } %pair, 0
659     ret i32 %r
662 define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
663 ; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst:
664 ; CHECK:    casal w0, w1, [x2]
665     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4
666     %r = extractvalue { i32, i1 } %pair, 0
667     ret i32 %r
670 define dso_local i32 @cmpxchg_i32_aligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
671 ; CHECK-LABEL: cmpxchg_i32_aligned_acq_rel_seq_cst_weak:
672 ; CHECK:    casal w0, w1, [x2]
673     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 4
674     %r = extractvalue { i32, i1 } %pair, 0
675     ret i32 %r
678 define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {
679 ; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic:
680 ; CHECK:    casal w0, w1, [x2]
681     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4
682     %r = extractvalue { i32, i1 } %pair, 0
683     ret i32 %r
686 define dso_local i32 @cmpxchg_i32_aligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
687 ; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_monotonic_weak:
688 ; CHECK:    casal w0, w1, [x2]
689     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 4
690     %r = extractvalue { i32, i1 } %pair, 0
691     ret i32 %r
694 define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {
695 ; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire:
696 ; CHECK:    casal w0, w1, [x2]
697     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4
698     %r = extractvalue { i32, i1 } %pair, 0
699     ret i32 %r
702 define dso_local i32 @cmpxchg_i32_aligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
703 ; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_acquire_weak:
704 ; CHECK:    casal w0, w1, [x2]
705     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 4
706     %r = extractvalue { i32, i1 } %pair, 0
707     ret i32 %r
710 define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
711 ; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst:
712 ; CHECK:    casal w0, w1, [x2]
713     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4
714     %r = extractvalue { i32, i1 } %pair, 0
715     ret i32 %r
718 define dso_local i32 @cmpxchg_i32_aligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
719 ; CHECK-LABEL: cmpxchg_i32_aligned_seq_cst_seq_cst_weak:
720 ; CHECK:    casal w0, w1, [x2]
721     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 4
722     %r = extractvalue { i32, i1 } %pair, 0
723     ret i32 %r
726 define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {
727 ; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic:
728 ; CHECK:    cas x0, x1, [x2]
729     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8
730     %r = extractvalue { i64, i1 } %pair, 0
731     ret i64 %r
734 define dso_local i64 @cmpxchg_i64_aligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
735 ; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_monotonic_weak:
736 ; CHECK:    cas x0, x1, [x2]
737     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 8
738     %r = extractvalue { i64, i1 } %pair, 0
739     ret i64 %r
742 define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {
743 ; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire:
744 ; CHECK:    casa x0, x1, [x2]
745     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8
746     %r = extractvalue { i64, i1 } %pair, 0
747     ret i64 %r
750 define dso_local i64 @cmpxchg_i64_aligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
751 ; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_acquire_weak:
752 ; CHECK:    casa x0, x1, [x2]
753     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 8
754     %r = extractvalue { i64, i1 } %pair, 0
755     ret i64 %r
758 define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
759 ; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst:
760 ; CHECK:    casal x0, x1, [x2]
761     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8
762     %r = extractvalue { i64, i1 } %pair, 0
763     ret i64 %r
766 define dso_local i64 @cmpxchg_i64_aligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
767 ; CHECK-LABEL: cmpxchg_i64_aligned_monotonic_seq_cst_weak:
768 ; CHECK:    casal x0, x1, [x2]
769     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 8
770     %r = extractvalue { i64, i1 } %pair, 0
771     ret i64 %r
774 define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {
775 ; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic:
776 ; CHECK:    casa x0, x1, [x2]
777     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8
778     %r = extractvalue { i64, i1 } %pair, 0
779     ret i64 %r
782 define dso_local i64 @cmpxchg_i64_aligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
783 ; CHECK-LABEL: cmpxchg_i64_aligned_acquire_monotonic_weak:
784 ; CHECK:    casa x0, x1, [x2]
785     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 8
786     %r = extractvalue { i64, i1 } %pair, 0
787     ret i64 %r
790 define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {
791 ; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire:
792 ; CHECK:    casa x0, x1, [x2]
793     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8
794     %r = extractvalue { i64, i1 } %pair, 0
795     ret i64 %r
798 define dso_local i64 @cmpxchg_i64_aligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
799 ; CHECK-LABEL: cmpxchg_i64_aligned_acquire_acquire_weak:
800 ; CHECK:    casa x0, x1, [x2]
801     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 8
802     %r = extractvalue { i64, i1 } %pair, 0
803     ret i64 %r
806 define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
807 ; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst:
808 ; CHECK:    casal x0, x1, [x2]
809     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8
810     %r = extractvalue { i64, i1 } %pair, 0
811     ret i64 %r
814 define dso_local i64 @cmpxchg_i64_aligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
815 ; CHECK-LABEL: cmpxchg_i64_aligned_acquire_seq_cst_weak:
816 ; CHECK:    casal x0, x1, [x2]
817     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 8
818     %r = extractvalue { i64, i1 } %pair, 0
819     ret i64 %r
822 define dso_local i64 @cmpxchg_i64_aligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {
823 ; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic:
824 ; CHECK:    casl x0, x1, [x2]
825     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 8
826     %r = extractvalue { i64, i1 } %pair, 0
827     ret i64 %r
830 define dso_local i64 @cmpxchg_i64_aligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
831 ; CHECK-LABEL: cmpxchg_i64_aligned_release_monotonic_weak:
832 ; CHECK:    casl x0, x1, [x2]
833     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 8
834     %r = extractvalue { i64, i1 } %pair, 0
835     ret i64 %r
838 define dso_local i64 @cmpxchg_i64_aligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {
839 ; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire:
840 ; CHECK:    casal x0, x1, [x2]
841     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 8
842     %r = extractvalue { i64, i1 } %pair, 0
843     ret i64 %r
846 define dso_local i64 @cmpxchg_i64_aligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
847 ; CHECK-LABEL: cmpxchg_i64_aligned_release_acquire_weak:
848 ; CHECK:    casal x0, x1, [x2]
849     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 8
850     %r = extractvalue { i64, i1 } %pair, 0
851     ret i64 %r
854 define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
855 ; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst:
856 ; CHECK:    casal x0, x1, [x2]
857     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8
858     %r = extractvalue { i64, i1 } %pair, 0
859     ret i64 %r
862 define dso_local i64 @cmpxchg_i64_aligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
863 ; CHECK-LABEL: cmpxchg_i64_aligned_release_seq_cst_weak:
864 ; CHECK:    casal x0, x1, [x2]
865     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 8
866     %r = extractvalue { i64, i1 } %pair, 0
867     ret i64 %r
870 define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {
871 ; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic:
872 ; CHECK:    casal x0, x1, [x2]
873     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8
874     %r = extractvalue { i64, i1 } %pair, 0
875     ret i64 %r
878 define dso_local i64 @cmpxchg_i64_aligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
879 ; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_monotonic_weak:
880 ; CHECK:    casal x0, x1, [x2]
881     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 8
882     %r = extractvalue { i64, i1 } %pair, 0
883     ret i64 %r
886 define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {
887 ; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire:
888 ; CHECK:    casal x0, x1, [x2]
889     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8
890     %r = extractvalue { i64, i1 } %pair, 0
891     ret i64 %r
894 define dso_local i64 @cmpxchg_i64_aligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
895 ; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_acquire_weak:
896 ; CHECK:    casal x0, x1, [x2]
897     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 8
898     %r = extractvalue { i64, i1 } %pair, 0
899     ret i64 %r
902 define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
903 ; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst:
904 ; CHECK:    casal x0, x1, [x2]
905     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8
906     %r = extractvalue { i64, i1 } %pair, 0
907     ret i64 %r
910 define dso_local i64 @cmpxchg_i64_aligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
911 ; CHECK-LABEL: cmpxchg_i64_aligned_acq_rel_seq_cst_weak:
912 ; CHECK:    casal x0, x1, [x2]
913     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 8
914     %r = extractvalue { i64, i1 } %pair, 0
915     ret i64 %r
918 define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {
919 ; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic:
920 ; CHECK:    casal x0, x1, [x2]
921     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8
922     %r = extractvalue { i64, i1 } %pair, 0
923     ret i64 %r
926 define dso_local i64 @cmpxchg_i64_aligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
927 ; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_monotonic_weak:
928 ; CHECK:    casal x0, x1, [x2]
929     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 8
930     %r = extractvalue { i64, i1 } %pair, 0
931     ret i64 %r
934 define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {
935 ; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire:
936 ; CHECK:    casal x0, x1, [x2]
937     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8
938     %r = extractvalue { i64, i1 } %pair, 0
939     ret i64 %r
942 define dso_local i64 @cmpxchg_i64_aligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
943 ; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_acquire_weak:
944 ; CHECK:    casal x0, x1, [x2]
945     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 8
946     %r = extractvalue { i64, i1 } %pair, 0
947     ret i64 %r
950 define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
951 ; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst:
952 ; CHECK:    casal x0, x1, [x2]
953     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8
954     %r = extractvalue { i64, i1 } %pair, 0
955     ret i64 %r
958 define dso_local i64 @cmpxchg_i64_aligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
959 ; CHECK-LABEL: cmpxchg_i64_aligned_seq_cst_seq_cst_weak:
960 ; CHECK:    casal x0, x1, [x2]
961     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 8
962     %r = extractvalue { i64, i1 } %pair, 0
963     ret i64 %r
966 define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {
967 ; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:
968 ; -O0:    casp x2, x3, x0, x1, [x4]
970 ; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic:
971 ; -O1:    casp x0, x1, x2, x3, [x4]
972     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16
973     %r = extractvalue { i128, i1 } %pair, 0
974     ret i128 %r
977 define dso_local i128 @cmpxchg_i128_aligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
978 ; -O0-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:
979 ; -O0:    casp x2, x3, x0, x1, [x4]
981 ; -O1-LABEL: cmpxchg_i128_aligned_monotonic_monotonic_weak:
982 ; -O1:    casp x0, x1, x2, x3, [x4]
983     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 16
984     %r = extractvalue { i128, i1 } %pair, 0
985     ret i128 %r
988 define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {
989 ; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire:
990 ; -O0:    caspa x2, x3, x0, x1, [x4]
992 ; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire:
993 ; -O1:    caspa x0, x1, x2, x3, [x4]
994     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16
995     %r = extractvalue { i128, i1 } %pair, 0
996     ret i128 %r
999 define dso_local i128 @cmpxchg_i128_aligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1000 ; -O0-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:
1001 ; -O0:    caspa x2, x3, x0, x1, [x4]
1003 ; -O1-LABEL: cmpxchg_i128_aligned_monotonic_acquire_weak:
1004 ; -O1:    caspa x0, x1, x2, x3, [x4]
1005     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 16
1006     %r = extractvalue { i128, i1 } %pair, 0
1007     ret i128 %r
1010 define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1011 ; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:
1012 ; -O0:    caspal x2, x3, x0, x1, [x4]
1014 ; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst:
1015 ; -O1:    caspal x0, x1, x2, x3, [x4]
1016     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16
1017     %r = extractvalue { i128, i1 } %pair, 0
1018     ret i128 %r
1021 define dso_local i128 @cmpxchg_i128_aligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1022 ; -O0-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:
1023 ; -O0:    caspal x2, x3, x0, x1, [x4]
1025 ; -O1-LABEL: cmpxchg_i128_aligned_monotonic_seq_cst_weak:
1026 ; -O1:    caspal x0, x1, x2, x3, [x4]
1027     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 16
1028     %r = extractvalue { i128, i1 } %pair, 0
1029     ret i128 %r
1032 define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1033 ; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic:
1034 ; -O0:    caspa x2, x3, x0, x1, [x4]
1036 ; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic:
1037 ; -O1:    caspa x0, x1, x2, x3, [x4]
1038     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16
1039     %r = extractvalue { i128, i1 } %pair, 0
1040     ret i128 %r
1043 define dso_local i128 @cmpxchg_i128_aligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1044 ; -O0-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:
1045 ; -O0:    caspa x2, x3, x0, x1, [x4]
1047 ; -O1-LABEL: cmpxchg_i128_aligned_acquire_monotonic_weak:
1048 ; -O1:    caspa x0, x1, x2, x3, [x4]
1049     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 16
1050     %r = extractvalue { i128, i1 } %pair, 0
1051     ret i128 %r
1054 define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {
1055 ; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire:
1056 ; -O0:    caspa x2, x3, x0, x1, [x4]
1058 ; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire:
1059 ; -O1:    caspa x0, x1, x2, x3, [x4]
1060     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16
1061     %r = extractvalue { i128, i1 } %pair, 0
1062     ret i128 %r
1065 define dso_local i128 @cmpxchg_i128_aligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1066 ; -O0-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:
1067 ; -O0:    caspa x2, x3, x0, x1, [x4]
1069 ; -O1-LABEL: cmpxchg_i128_aligned_acquire_acquire_weak:
1070 ; -O1:    caspa x0, x1, x2, x3, [x4]
1071     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 16
1072     %r = extractvalue { i128, i1 } %pair, 0
1073     ret i128 %r
1076 define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1077 ; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:
1078 ; -O0:    caspal x2, x3, x0, x1, [x4]
1080 ; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst:
1081 ; -O1:    caspal x0, x1, x2, x3, [x4]
1082     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16
1083     %r = extractvalue { i128, i1 } %pair, 0
1084     ret i128 %r
1087 define dso_local i128 @cmpxchg_i128_aligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1088 ; -O0-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:
1089 ; -O0:    caspal x2, x3, x0, x1, [x4]
1091 ; -O1-LABEL: cmpxchg_i128_aligned_acquire_seq_cst_weak:
1092 ; -O1:    caspal x0, x1, x2, x3, [x4]
1093     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 16
1094     %r = extractvalue { i128, i1 } %pair, 0
1095     ret i128 %r
1098 define dso_local i128 @cmpxchg_i128_aligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1099 ; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic:
1100 ; -O0:    caspl x2, x3, x0, x1, [x4]
1102 ; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic:
1103 ; -O1:    caspl x0, x1, x2, x3, [x4]
1104     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 16
1105     %r = extractvalue { i128, i1 } %pair, 0
1106     ret i128 %r
1109 define dso_local i128 @cmpxchg_i128_aligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1110 ; -O0-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:
1111 ; -O0:    caspl x2, x3, x0, x1, [x4]
1113 ; -O1-LABEL: cmpxchg_i128_aligned_release_monotonic_weak:
1114 ; -O1:    caspl x0, x1, x2, x3, [x4]
1115     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 16
1116     %r = extractvalue { i128, i1 } %pair, 0
1117     ret i128 %r
1120 define dso_local i128 @cmpxchg_i128_aligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {
1121 ; -O0-LABEL: cmpxchg_i128_aligned_release_acquire:
1122 ; -O0:    caspal x2, x3, x0, x1, [x4]
1124 ; -O1-LABEL: cmpxchg_i128_aligned_release_acquire:
1125 ; -O1:    caspal x0, x1, x2, x3, [x4]
1126     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 16
1127     %r = extractvalue { i128, i1 } %pair, 0
1128     ret i128 %r
1131 define dso_local i128 @cmpxchg_i128_aligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1132 ; -O0-LABEL: cmpxchg_i128_aligned_release_acquire_weak:
1133 ; -O0:    caspal x2, x3, x0, x1, [x4]
1135 ; -O1-LABEL: cmpxchg_i128_aligned_release_acquire_weak:
1136 ; -O1:    caspal x0, x1, x2, x3, [x4]
1137     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 16
1138     %r = extractvalue { i128, i1 } %pair, 0
1139     ret i128 %r
1142 define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1143 ; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst:
1144 ; -O0:    caspal x2, x3, x0, x1, [x4]
1146 ; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst:
1147 ; -O1:    caspal x0, x1, x2, x3, [x4]
1148     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16
1149     %r = extractvalue { i128, i1 } %pair, 0
1150     ret i128 %r
1153 define dso_local i128 @cmpxchg_i128_aligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1154 ; -O0-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:
1155 ; -O0:    caspal x2, x3, x0, x1, [x4]
1157 ; -O1-LABEL: cmpxchg_i128_aligned_release_seq_cst_weak:
1158 ; -O1:    caspal x0, x1, x2, x3, [x4]
1159     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 16
1160     %r = extractvalue { i128, i1 } %pair, 0
1161     ret i128 %r
1164 define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1165 ; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:
1166 ; -O0:    caspal x2, x3, x0, x1, [x4]
1168 ; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic:
1169 ; -O1:    caspal x0, x1, x2, x3, [x4]
1170     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16
1171     %r = extractvalue { i128, i1 } %pair, 0
1172     ret i128 %r
1175 define dso_local i128 @cmpxchg_i128_aligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1176 ; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:
1177 ; -O0:    caspal x2, x3, x0, x1, [x4]
1179 ; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_monotonic_weak:
1180 ; -O1:    caspal x0, x1, x2, x3, [x4]
1181     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 16
1182     %r = extractvalue { i128, i1 } %pair, 0
1183     ret i128 %r
1186 define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {
1187 ; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:
1188 ; -O0:    caspal x2, x3, x0, x1, [x4]
1190 ; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire:
1191 ; -O1:    caspal x0, x1, x2, x3, [x4]
1192     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16
1193     %r = extractvalue { i128, i1 } %pair, 0
1194     ret i128 %r
1197 define dso_local i128 @cmpxchg_i128_aligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1198 ; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:
1199 ; -O0:    caspal x2, x3, x0, x1, [x4]
1201 ; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_acquire_weak:
1202 ; -O1:    caspal x0, x1, x2, x3, [x4]
1203     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 16
1204     %r = extractvalue { i128, i1 } %pair, 0
1205     ret i128 %r
1208 define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1209 ; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:
1210 ; -O0:    caspal x2, x3, x0, x1, [x4]
1212 ; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst:
1213 ; -O1:    caspal x0, x1, x2, x3, [x4]
1214     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16
1215     %r = extractvalue { i128, i1 } %pair, 0
1216     ret i128 %r
1219 define dso_local i128 @cmpxchg_i128_aligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1220 ; -O0-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:
1221 ; -O0:    caspal x2, x3, x0, x1, [x4]
1223 ; -O1-LABEL: cmpxchg_i128_aligned_acq_rel_seq_cst_weak:
1224 ; -O1:    caspal x0, x1, x2, x3, [x4]
1225     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 16
1226     %r = extractvalue { i128, i1 } %pair, 0
1227     ret i128 %r
1230 define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {
1231 ; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:
1232 ; -O0:    caspal x2, x3, x0, x1, [x4]
1234 ; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic:
1235 ; -O1:    caspal x0, x1, x2, x3, [x4]
1236     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16
1237     %r = extractvalue { i128, i1 } %pair, 0
1238     ret i128 %r
1241 define dso_local i128 @cmpxchg_i128_aligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
1242 ; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:
1243 ; -O0:    caspal x2, x3, x0, x1, [x4]
1245 ; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_monotonic_weak:
1246 ; -O1:    caspal x0, x1, x2, x3, [x4]
1247     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 16
1248     %r = extractvalue { i128, i1 } %pair, 0
1249     ret i128 %r
1252 define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {
1253 ; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:
1254 ; -O0:    caspal x2, x3, x0, x1, [x4]
1256 ; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire:
1257 ; -O1:    caspal x0, x1, x2, x3, [x4]
1258     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16
1259     %r = extractvalue { i128, i1 } %pair, 0
1260     ret i128 %r
1263 define dso_local i128 @cmpxchg_i128_aligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
1264 ; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:
1265 ; -O0:    caspal x2, x3, x0, x1, [x4]
1267 ; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_acquire_weak:
1268 ; -O1:    caspal x0, x1, x2, x3, [x4]
1269     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 16
1270     %r = extractvalue { i128, i1 } %pair, 0
1271     ret i128 %r
1274 define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
1275 ; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:
1276 ; -O0:    caspal x2, x3, x0, x1, [x4]
1278 ; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst:
1279 ; -O1:    caspal x0, x1, x2, x3, [x4]
1280     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16
1281     %r = extractvalue { i128, i1 } %pair, 0
1282     ret i128 %r
1285 define dso_local i128 @cmpxchg_i128_aligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
1286 ; -O0-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:
1287 ; -O0:    caspal x2, x3, x0, x1, [x4]
1289 ; -O1-LABEL: cmpxchg_i128_aligned_seq_cst_seq_cst_weak:
1290 ; -O1:    caspal x0, x1, x2, x3, [x4]
1291     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 16
1292     %r = extractvalue { i128, i1 } %pair, 0
1293     ret i128 %r
1296 define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1297 ; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic:
1298 ; CHECK:    casb w0, w1, [x2]
1299     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
1300     %r = extractvalue { i8, i1 } %pair, 0
1301     ret i8 %r
1304 define dso_local i8 @cmpxchg_i8_unaligned_monotonic_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1305 ; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_monotonic_weak:
1306 ; CHECK:    casb w0, w1, [x2]
1307     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic monotonic, align 1
1308     %r = extractvalue { i8, i1 } %pair, 0
1309     ret i8 %r
1312 define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire(i8 %expected, i8 %new, ptr %ptr) {
1313 ; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire:
1314 ; CHECK:    casab w0, w1, [x2]
1315     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
1316     %r = extractvalue { i8, i1 } %pair, 0
1317     ret i8 %r
1320 define dso_local i8 @cmpxchg_i8_unaligned_monotonic_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1321 ; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_acquire_weak:
1322 ; CHECK:    casab w0, w1, [x2]
1323     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic acquire, align 1
1324     %r = extractvalue { i8, i1 } %pair, 0
1325     ret i8 %r
1328 define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1329 ; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst:
1330 ; CHECK:    casalb w0, w1, [x2]
1331     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
1332     %r = extractvalue { i8, i1 } %pair, 0
1333     ret i8 %r
1336 define dso_local i8 @cmpxchg_i8_unaligned_monotonic_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1337 ; CHECK-LABEL: cmpxchg_i8_unaligned_monotonic_seq_cst_weak:
1338 ; CHECK:    casalb w0, w1, [x2]
1339     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new monotonic seq_cst, align 1
1340     %r = extractvalue { i8, i1 } %pair, 0
1341     ret i8 %r
1344 define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1345 ; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic:
1346 ; CHECK:    casab w0, w1, [x2]
1347     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
1348     %r = extractvalue { i8, i1 } %pair, 0
1349     ret i8 %r
1352 define dso_local i8 @cmpxchg_i8_unaligned_acquire_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1353 ; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_monotonic_weak:
1354 ; CHECK:    casab w0, w1, [x2]
1355     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire monotonic, align 1
1356     %r = extractvalue { i8, i1 } %pair, 0
1357     ret i8 %r
1360 define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire(i8 %expected, i8 %new, ptr %ptr) {
1361 ; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire:
1362 ; CHECK:    casab w0, w1, [x2]
1363     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
1364     %r = extractvalue { i8, i1 } %pair, 0
1365     ret i8 %r
1368 define dso_local i8 @cmpxchg_i8_unaligned_acquire_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1369 ; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_acquire_weak:
1370 ; CHECK:    casab w0, w1, [x2]
1371     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire acquire, align 1
1372     %r = extractvalue { i8, i1 } %pair, 0
1373     ret i8 %r
1376 define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1377 ; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst:
1378 ; CHECK:    casalb w0, w1, [x2]
1379     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
1380     %r = extractvalue { i8, i1 } %pair, 0
1381     ret i8 %r
1384 define dso_local i8 @cmpxchg_i8_unaligned_acquire_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1385 ; CHECK-LABEL: cmpxchg_i8_unaligned_acquire_seq_cst_weak:
1386 ; CHECK:    casalb w0, w1, [x2]
1387     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acquire seq_cst, align 1
1388     %r = extractvalue { i8, i1 } %pair, 0
1389     ret i8 %r
1392 define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1393 ; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic:
1394 ; CHECK:    caslb w0, w1, [x2]
1395     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
1396     %r = extractvalue { i8, i1 } %pair, 0
1397     ret i8 %r
1400 define dso_local i8 @cmpxchg_i8_unaligned_release_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1401 ; CHECK-LABEL: cmpxchg_i8_unaligned_release_monotonic_weak:
1402 ; CHECK:    caslb w0, w1, [x2]
1403     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release monotonic, align 1
1404     %r = extractvalue { i8, i1 } %pair, 0
1405     ret i8 %r
1408 define dso_local i8 @cmpxchg_i8_unaligned_release_acquire(i8 %expected, i8 %new, ptr %ptr) {
1409 ; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire:
1410 ; CHECK:    casalb w0, w1, [x2]
1411     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release acquire, align 1
1412     %r = extractvalue { i8, i1 } %pair, 0
1413     ret i8 %r
1416 define dso_local i8 @cmpxchg_i8_unaligned_release_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1417 ; CHECK-LABEL: cmpxchg_i8_unaligned_release_acquire_weak:
1418 ; CHECK:    casalb w0, w1, [x2]
1419     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release acquire, align 1
1420     %r = extractvalue { i8, i1 } %pair, 0
1421     ret i8 %r
1424 define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1425 ; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst:
1426 ; CHECK:    casalb w0, w1, [x2]
1427     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
1428     %r = extractvalue { i8, i1 } %pair, 0
1429     ret i8 %r
1432 define dso_local i8 @cmpxchg_i8_unaligned_release_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1433 ; CHECK-LABEL: cmpxchg_i8_unaligned_release_seq_cst_weak:
1434 ; CHECK:    casalb w0, w1, [x2]
1435     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new release seq_cst, align 1
1436     %r = extractvalue { i8, i1 } %pair, 0
1437     ret i8 %r
1440 define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1441 ; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic:
1442 ; CHECK:    casalb w0, w1, [x2]
1443     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
1444     %r = extractvalue { i8, i1 } %pair, 0
1445     ret i8 %r
1448 define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1449 ; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_monotonic_weak:
1450 ; CHECK:    casalb w0, w1, [x2]
1451     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel monotonic, align 1
1452     %r = extractvalue { i8, i1 } %pair, 0
1453     ret i8 %r
1456 define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire(i8 %expected, i8 %new, ptr %ptr) {
1457 ; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire:
1458 ; CHECK:    casalb w0, w1, [x2]
1459     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
1460     %r = extractvalue { i8, i1 } %pair, 0
1461     ret i8 %r
1464 define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1465 ; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_acquire_weak:
1466 ; CHECK:    casalb w0, w1, [x2]
1467     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel acquire, align 1
1468     %r = extractvalue { i8, i1 } %pair, 0
1469     ret i8 %r
1472 define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1473 ; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst:
1474 ; CHECK:    casalb w0, w1, [x2]
1475     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
1476     %r = extractvalue { i8, i1 } %pair, 0
1477     ret i8 %r
1480 define dso_local i8 @cmpxchg_i8_unaligned_acq_rel_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1481 ; CHECK-LABEL: cmpxchg_i8_unaligned_acq_rel_seq_cst_weak:
1482 ; CHECK:    casalb w0, w1, [x2]
1483     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new acq_rel seq_cst, align 1
1484     %r = extractvalue { i8, i1 } %pair, 0
1485     ret i8 %r
1488 define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic(i8 %expected, i8 %new, ptr %ptr) {
1489 ; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic:
1490 ; CHECK:    casalb w0, w1, [x2]
1491     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
1492     %r = extractvalue { i8, i1 } %pair, 0
1493     ret i8 %r
1496 define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_monotonic_weak(i8 %expected, i8 %new, ptr %ptr) {
1497 ; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_monotonic_weak:
1498 ; CHECK:    casalb w0, w1, [x2]
1499     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst monotonic, align 1
1500     %r = extractvalue { i8, i1 } %pair, 0
1501     ret i8 %r
1504 define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire(i8 %expected, i8 %new, ptr %ptr) {
1505 ; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire:
1506 ; CHECK:    casalb w0, w1, [x2]
1507     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
1508     %r = extractvalue { i8, i1 } %pair, 0
1509     ret i8 %r
1512 define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_acquire_weak(i8 %expected, i8 %new, ptr %ptr) {
1513 ; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_acquire_weak:
1514 ; CHECK:    casalb w0, w1, [x2]
1515     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst acquire, align 1
1516     %r = extractvalue { i8, i1 } %pair, 0
1517     ret i8 %r
1520 define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst(i8 %expected, i8 %new, ptr %ptr) {
1521 ; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst:
1522 ; CHECK:    casalb w0, w1, [x2]
1523     %pair = cmpxchg ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
1524     %r = extractvalue { i8, i1 } %pair, 0
1525     ret i8 %r
1528 define dso_local i8 @cmpxchg_i8_unaligned_seq_cst_seq_cst_weak(i8 %expected, i8 %new, ptr %ptr) {
1529 ; CHECK-LABEL: cmpxchg_i8_unaligned_seq_cst_seq_cst_weak:
1530 ; CHECK:    casalb w0, w1, [x2]
1531     %pair = cmpxchg weak ptr %ptr, i8 %expected, i8 %new seq_cst seq_cst, align 1
1532     %r = extractvalue { i8, i1 } %pair, 0
1533     ret i8 %r
1536 define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1537 ; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic:
1538 ; CHECK:    bl __atomic_compare_exchange
1539     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1
1540     %r = extractvalue { i16, i1 } %pair, 0
1541     ret i16 %r
1544 define dso_local i16 @cmpxchg_i16_unaligned_monotonic_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1545 ; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_monotonic_weak:
1546 ; CHECK:    bl __atomic_compare_exchange
1547     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic monotonic, align 1
1548     %r = extractvalue { i16, i1 } %pair, 0
1549     ret i16 %r
1552 define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire(i16 %expected, i16 %new, ptr %ptr) {
1553 ; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire:
1554 ; CHECK:    bl __atomic_compare_exchange
1555     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1
1556     %r = extractvalue { i16, i1 } %pair, 0
1557     ret i16 %r
1560 define dso_local i16 @cmpxchg_i16_unaligned_monotonic_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1561 ; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_acquire_weak:
1562 ; CHECK:    bl __atomic_compare_exchange
1563     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic acquire, align 1
1564     %r = extractvalue { i16, i1 } %pair, 0
1565     ret i16 %r
1568 define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1569 ; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst:
1570 ; CHECK:    bl __atomic_compare_exchange
1571     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1
1572     %r = extractvalue { i16, i1 } %pair, 0
1573     ret i16 %r
1576 define dso_local i16 @cmpxchg_i16_unaligned_monotonic_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1577 ; CHECK-LABEL: cmpxchg_i16_unaligned_monotonic_seq_cst_weak:
1578 ; CHECK:    bl __atomic_compare_exchange
1579     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new monotonic seq_cst, align 1
1580     %r = extractvalue { i16, i1 } %pair, 0
1581     ret i16 %r
1584 define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1585 ; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic:
1586 ; CHECK:    bl __atomic_compare_exchange
1587     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1
1588     %r = extractvalue { i16, i1 } %pair, 0
1589     ret i16 %r
1592 define dso_local i16 @cmpxchg_i16_unaligned_acquire_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1593 ; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_monotonic_weak:
1594 ; CHECK:    bl __atomic_compare_exchange
1595     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire monotonic, align 1
1596     %r = extractvalue { i16, i1 } %pair, 0
1597     ret i16 %r
1600 define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire(i16 %expected, i16 %new, ptr %ptr) {
1601 ; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire:
1602 ; CHECK:    bl __atomic_compare_exchange
1603     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1
1604     %r = extractvalue { i16, i1 } %pair, 0
1605     ret i16 %r
1608 define dso_local i16 @cmpxchg_i16_unaligned_acquire_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1609 ; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_acquire_weak:
1610 ; CHECK:    bl __atomic_compare_exchange
1611     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire acquire, align 1
1612     %r = extractvalue { i16, i1 } %pair, 0
1613     ret i16 %r
1616 define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1617 ; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst:
1618 ; CHECK:    bl __atomic_compare_exchange
1619     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1
1620     %r = extractvalue { i16, i1 } %pair, 0
1621     ret i16 %r
1624 define dso_local i16 @cmpxchg_i16_unaligned_acquire_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1625 ; CHECK-LABEL: cmpxchg_i16_unaligned_acquire_seq_cst_weak:
1626 ; CHECK:    bl __atomic_compare_exchange
1627     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acquire seq_cst, align 1
1628     %r = extractvalue { i16, i1 } %pair, 0
1629     ret i16 %r
1632 define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1633 ; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic:
1634 ; CHECK:    bl __atomic_compare_exchange
1635     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release monotonic, align 1
1636     %r = extractvalue { i16, i1 } %pair, 0
1637     ret i16 %r
1640 define dso_local i16 @cmpxchg_i16_unaligned_release_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1641 ; CHECK-LABEL: cmpxchg_i16_unaligned_release_monotonic_weak:
1642 ; CHECK:    bl __atomic_compare_exchange
1643     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release monotonic, align 1
1644     %r = extractvalue { i16, i1 } %pair, 0
1645     ret i16 %r
1648 define dso_local i16 @cmpxchg_i16_unaligned_release_acquire(i16 %expected, i16 %new, ptr %ptr) {
1649 ; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire:
1650 ; CHECK:    bl __atomic_compare_exchange
1651     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release acquire, align 1
1652     %r = extractvalue { i16, i1 } %pair, 0
1653     ret i16 %r
1656 define dso_local i16 @cmpxchg_i16_unaligned_release_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1657 ; CHECK-LABEL: cmpxchg_i16_unaligned_release_acquire_weak:
1658 ; CHECK:    bl __atomic_compare_exchange
1659     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release acquire, align 1
1660     %r = extractvalue { i16, i1 } %pair, 0
1661     ret i16 %r
1664 define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1665 ; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst:
1666 ; CHECK:    bl __atomic_compare_exchange
1667     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1
1668     %r = extractvalue { i16, i1 } %pair, 0
1669     ret i16 %r
1672 define dso_local i16 @cmpxchg_i16_unaligned_release_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1673 ; CHECK-LABEL: cmpxchg_i16_unaligned_release_seq_cst_weak:
1674 ; CHECK:    bl __atomic_compare_exchange
1675     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new release seq_cst, align 1
1676     %r = extractvalue { i16, i1 } %pair, 0
1677     ret i16 %r
1680 define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1681 ; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic:
1682 ; CHECK:    bl __atomic_compare_exchange
1683     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1
1684     %r = extractvalue { i16, i1 } %pair, 0
1685     ret i16 %r
1688 define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1689 ; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_monotonic_weak:
1690 ; CHECK:    bl __atomic_compare_exchange
1691     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel monotonic, align 1
1692     %r = extractvalue { i16, i1 } %pair, 0
1693     ret i16 %r
1696 define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire(i16 %expected, i16 %new, ptr %ptr) {
1697 ; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire:
1698 ; CHECK:    bl __atomic_compare_exchange
1699     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1
1700     %r = extractvalue { i16, i1 } %pair, 0
1701     ret i16 %r
1704 define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1705 ; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_acquire_weak:
1706 ; CHECK:    bl __atomic_compare_exchange
1707     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel acquire, align 1
1708     %r = extractvalue { i16, i1 } %pair, 0
1709     ret i16 %r
1712 define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1713 ; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst:
1714 ; CHECK:    bl __atomic_compare_exchange
1715     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1
1716     %r = extractvalue { i16, i1 } %pair, 0
1717     ret i16 %r
1720 define dso_local i16 @cmpxchg_i16_unaligned_acq_rel_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1721 ; CHECK-LABEL: cmpxchg_i16_unaligned_acq_rel_seq_cst_weak:
1722 ; CHECK:    bl __atomic_compare_exchange
1723     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new acq_rel seq_cst, align 1
1724     %r = extractvalue { i16, i1 } %pair, 0
1725     ret i16 %r
1728 define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic(i16 %expected, i16 %new, ptr %ptr) {
1729 ; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic:
1730 ; CHECK:    bl __atomic_compare_exchange
1731     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1
1732     %r = extractvalue { i16, i1 } %pair, 0
1733     ret i16 %r
1736 define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_monotonic_weak(i16 %expected, i16 %new, ptr %ptr) {
1737 ; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_monotonic_weak:
1738 ; CHECK:    bl __atomic_compare_exchange
1739     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst monotonic, align 1
1740     %r = extractvalue { i16, i1 } %pair, 0
1741     ret i16 %r
1744 define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire(i16 %expected, i16 %new, ptr %ptr) {
1745 ; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire:
1746 ; CHECK:    bl __atomic_compare_exchange
1747     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1
1748     %r = extractvalue { i16, i1 } %pair, 0
1749     ret i16 %r
1752 define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_acquire_weak(i16 %expected, i16 %new, ptr %ptr) {
1753 ; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_acquire_weak:
1754 ; CHECK:    bl __atomic_compare_exchange
1755     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst acquire, align 1
1756     %r = extractvalue { i16, i1 } %pair, 0
1757     ret i16 %r
1760 define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst(i16 %expected, i16 %new, ptr %ptr) {
1761 ; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst:
1762 ; CHECK:    bl __atomic_compare_exchange
1763     %pair = cmpxchg ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1
1764     %r = extractvalue { i16, i1 } %pair, 0
1765     ret i16 %r
1768 define dso_local i16 @cmpxchg_i16_unaligned_seq_cst_seq_cst_weak(i16 %expected, i16 %new, ptr %ptr) {
1769 ; CHECK-LABEL: cmpxchg_i16_unaligned_seq_cst_seq_cst_weak:
1770 ; CHECK:    bl __atomic_compare_exchange
1771     %pair = cmpxchg weak ptr %ptr, i16 %expected, i16 %new seq_cst seq_cst, align 1
1772     %r = extractvalue { i16, i1 } %pair, 0
1773     ret i16 %r
1776 define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1777 ; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic:
1778 ; CHECK:    bl __atomic_compare_exchange
1779     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1
1780     %r = extractvalue { i32, i1 } %pair, 0
1781     ret i32 %r
1784 define dso_local i32 @cmpxchg_i32_unaligned_monotonic_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1785 ; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_monotonic_weak:
1786 ; CHECK:    bl __atomic_compare_exchange
1787     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic monotonic, align 1
1788     %r = extractvalue { i32, i1 } %pair, 0
1789     ret i32 %r
1792 define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire(i32 %expected, i32 %new, ptr %ptr) {
1793 ; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire:
1794 ; CHECK:    bl __atomic_compare_exchange
1795     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1
1796     %r = extractvalue { i32, i1 } %pair, 0
1797     ret i32 %r
1800 define dso_local i32 @cmpxchg_i32_unaligned_monotonic_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1801 ; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_acquire_weak:
1802 ; CHECK:    bl __atomic_compare_exchange
1803     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic acquire, align 1
1804     %r = extractvalue { i32, i1 } %pair, 0
1805     ret i32 %r
1808 define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1809 ; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst:
1810 ; CHECK:    bl __atomic_compare_exchange
1811     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1
1812     %r = extractvalue { i32, i1 } %pair, 0
1813     ret i32 %r
1816 define dso_local i32 @cmpxchg_i32_unaligned_monotonic_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1817 ; CHECK-LABEL: cmpxchg_i32_unaligned_monotonic_seq_cst_weak:
1818 ; CHECK:    bl __atomic_compare_exchange
1819     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new monotonic seq_cst, align 1
1820     %r = extractvalue { i32, i1 } %pair, 0
1821     ret i32 %r
1824 define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1825 ; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic:
1826 ; CHECK:    bl __atomic_compare_exchange
1827     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1
1828     %r = extractvalue { i32, i1 } %pair, 0
1829     ret i32 %r
1832 define dso_local i32 @cmpxchg_i32_unaligned_acquire_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1833 ; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_monotonic_weak:
1834 ; CHECK:    bl __atomic_compare_exchange
1835     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire monotonic, align 1
1836     %r = extractvalue { i32, i1 } %pair, 0
1837     ret i32 %r
1840 define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire(i32 %expected, i32 %new, ptr %ptr) {
1841 ; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire:
1842 ; CHECK:    bl __atomic_compare_exchange
1843     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1
1844     %r = extractvalue { i32, i1 } %pair, 0
1845     ret i32 %r
1848 define dso_local i32 @cmpxchg_i32_unaligned_acquire_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1849 ; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_acquire_weak:
1850 ; CHECK:    bl __atomic_compare_exchange
1851     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire acquire, align 1
1852     %r = extractvalue { i32, i1 } %pair, 0
1853     ret i32 %r
1856 define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1857 ; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst:
1858 ; CHECK:    bl __atomic_compare_exchange
1859     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1
1860     %r = extractvalue { i32, i1 } %pair, 0
1861     ret i32 %r
1864 define dso_local i32 @cmpxchg_i32_unaligned_acquire_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1865 ; CHECK-LABEL: cmpxchg_i32_unaligned_acquire_seq_cst_weak:
1866 ; CHECK:    bl __atomic_compare_exchange
1867     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acquire seq_cst, align 1
1868     %r = extractvalue { i32, i1 } %pair, 0
1869     ret i32 %r
1872 define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1873 ; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic:
1874 ; CHECK:    bl __atomic_compare_exchange
1875     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release monotonic, align 1
1876     %r = extractvalue { i32, i1 } %pair, 0
1877     ret i32 %r
1880 define dso_local i32 @cmpxchg_i32_unaligned_release_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1881 ; CHECK-LABEL: cmpxchg_i32_unaligned_release_monotonic_weak:
1882 ; CHECK:    bl __atomic_compare_exchange
1883     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release monotonic, align 1
1884     %r = extractvalue { i32, i1 } %pair, 0
1885     ret i32 %r
1888 define dso_local i32 @cmpxchg_i32_unaligned_release_acquire(i32 %expected, i32 %new, ptr %ptr) {
1889 ; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire:
1890 ; CHECK:    bl __atomic_compare_exchange
1891     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release acquire, align 1
1892     %r = extractvalue { i32, i1 } %pair, 0
1893     ret i32 %r
1896 define dso_local i32 @cmpxchg_i32_unaligned_release_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1897 ; CHECK-LABEL: cmpxchg_i32_unaligned_release_acquire_weak:
1898 ; CHECK:    bl __atomic_compare_exchange
1899     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release acquire, align 1
1900     %r = extractvalue { i32, i1 } %pair, 0
1901     ret i32 %r
1904 define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1905 ; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst:
1906 ; CHECK:    bl __atomic_compare_exchange
1907     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1
1908     %r = extractvalue { i32, i1 } %pair, 0
1909     ret i32 %r
1912 define dso_local i32 @cmpxchg_i32_unaligned_release_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1913 ; CHECK-LABEL: cmpxchg_i32_unaligned_release_seq_cst_weak:
1914 ; CHECK:    bl __atomic_compare_exchange
1915     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new release seq_cst, align 1
1916     %r = extractvalue { i32, i1 } %pair, 0
1917     ret i32 %r
1920 define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1921 ; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic:
1922 ; CHECK:    bl __atomic_compare_exchange
1923     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1
1924     %r = extractvalue { i32, i1 } %pair, 0
1925     ret i32 %r
1928 define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1929 ; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_monotonic_weak:
1930 ; CHECK:    bl __atomic_compare_exchange
1931     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel monotonic, align 1
1932     %r = extractvalue { i32, i1 } %pair, 0
1933     ret i32 %r
1936 define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire(i32 %expected, i32 %new, ptr %ptr) {
1937 ; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire:
1938 ; CHECK:    bl __atomic_compare_exchange
1939     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1
1940     %r = extractvalue { i32, i1 } %pair, 0
1941     ret i32 %r
1944 define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1945 ; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_acquire_weak:
1946 ; CHECK:    bl __atomic_compare_exchange
1947     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel acquire, align 1
1948     %r = extractvalue { i32, i1 } %pair, 0
1949     ret i32 %r
1952 define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
1953 ; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst:
1954 ; CHECK:    bl __atomic_compare_exchange
1955     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1
1956     %r = extractvalue { i32, i1 } %pair, 0
1957     ret i32 %r
1960 define dso_local i32 @cmpxchg_i32_unaligned_acq_rel_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
1961 ; CHECK-LABEL: cmpxchg_i32_unaligned_acq_rel_seq_cst_weak:
1962 ; CHECK:    bl __atomic_compare_exchange
1963     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new acq_rel seq_cst, align 1
1964     %r = extractvalue { i32, i1 } %pair, 0
1965     ret i32 %r
1968 define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic(i32 %expected, i32 %new, ptr %ptr) {
1969 ; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic:
1970 ; CHECK:    bl __atomic_compare_exchange
1971     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1
1972     %r = extractvalue { i32, i1 } %pair, 0
1973     ret i32 %r
1976 define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_monotonic_weak(i32 %expected, i32 %new, ptr %ptr) {
1977 ; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_monotonic_weak:
1978 ; CHECK:    bl __atomic_compare_exchange
1979     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst monotonic, align 1
1980     %r = extractvalue { i32, i1 } %pair, 0
1981     ret i32 %r
1984 define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire(i32 %expected, i32 %new, ptr %ptr) {
1985 ; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire:
1986 ; CHECK:    bl __atomic_compare_exchange
1987     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1
1988     %r = extractvalue { i32, i1 } %pair, 0
1989     ret i32 %r
1992 define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_acquire_weak(i32 %expected, i32 %new, ptr %ptr) {
1993 ; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_acquire_weak:
1994 ; CHECK:    bl __atomic_compare_exchange
1995     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst acquire, align 1
1996     %r = extractvalue { i32, i1 } %pair, 0
1997     ret i32 %r
2000 define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst(i32 %expected, i32 %new, ptr %ptr) {
2001 ; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst:
2002 ; CHECK:    bl __atomic_compare_exchange
2003     %pair = cmpxchg ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1
2004     %r = extractvalue { i32, i1 } %pair, 0
2005     ret i32 %r
2008 define dso_local i32 @cmpxchg_i32_unaligned_seq_cst_seq_cst_weak(i32 %expected, i32 %new, ptr %ptr) {
2009 ; CHECK-LABEL: cmpxchg_i32_unaligned_seq_cst_seq_cst_weak:
2010 ; CHECK:    bl __atomic_compare_exchange
2011     %pair = cmpxchg weak ptr %ptr, i32 %expected, i32 %new seq_cst seq_cst, align 1
2012     %r = extractvalue { i32, i1 } %pair, 0
2013     ret i32 %r
2016 define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2017 ; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic:
2018 ; CHECK:    bl __atomic_compare_exchange
2019     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1
2020     %r = extractvalue { i64, i1 } %pair, 0
2021     ret i64 %r
2024 define dso_local i64 @cmpxchg_i64_unaligned_monotonic_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2025 ; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_monotonic_weak:
2026 ; CHECK:    bl __atomic_compare_exchange
2027     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic monotonic, align 1
2028     %r = extractvalue { i64, i1 } %pair, 0
2029     ret i64 %r
2032 define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire(i64 %expected, i64 %new, ptr %ptr) {
2033 ; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire:
2034 ; CHECK:    bl __atomic_compare_exchange
2035     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1
2036     %r = extractvalue { i64, i1 } %pair, 0
2037     ret i64 %r
2040 define dso_local i64 @cmpxchg_i64_unaligned_monotonic_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2041 ; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_acquire_weak:
2042 ; CHECK:    bl __atomic_compare_exchange
2043     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic acquire, align 1
2044     %r = extractvalue { i64, i1 } %pair, 0
2045     ret i64 %r
2048 define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2049 ; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst:
2050 ; CHECK:    bl __atomic_compare_exchange
2051     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1
2052     %r = extractvalue { i64, i1 } %pair, 0
2053     ret i64 %r
2056 define dso_local i64 @cmpxchg_i64_unaligned_monotonic_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2057 ; CHECK-LABEL: cmpxchg_i64_unaligned_monotonic_seq_cst_weak:
2058 ; CHECK:    bl __atomic_compare_exchange
2059     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new monotonic seq_cst, align 1
2060     %r = extractvalue { i64, i1 } %pair, 0
2061     ret i64 %r
2064 define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2065 ; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic:
2066 ; CHECK:    bl __atomic_compare_exchange
2067     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1
2068     %r = extractvalue { i64, i1 } %pair, 0
2069     ret i64 %r
2072 define dso_local i64 @cmpxchg_i64_unaligned_acquire_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2073 ; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_monotonic_weak:
2074 ; CHECK:    bl __atomic_compare_exchange
2075     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire monotonic, align 1
2076     %r = extractvalue { i64, i1 } %pair, 0
2077     ret i64 %r
2080 define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire(i64 %expected, i64 %new, ptr %ptr) {
2081 ; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire:
2082 ; CHECK:    bl __atomic_compare_exchange
2083     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1
2084     %r = extractvalue { i64, i1 } %pair, 0
2085     ret i64 %r
2088 define dso_local i64 @cmpxchg_i64_unaligned_acquire_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2089 ; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_acquire_weak:
2090 ; CHECK:    bl __atomic_compare_exchange
2091     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire acquire, align 1
2092     %r = extractvalue { i64, i1 } %pair, 0
2093     ret i64 %r
2096 define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2097 ; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst:
2098 ; CHECK:    bl __atomic_compare_exchange
2099     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1
2100     %r = extractvalue { i64, i1 } %pair, 0
2101     ret i64 %r
2104 define dso_local i64 @cmpxchg_i64_unaligned_acquire_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2105 ; CHECK-LABEL: cmpxchg_i64_unaligned_acquire_seq_cst_weak:
2106 ; CHECK:    bl __atomic_compare_exchange
2107     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acquire seq_cst, align 1
2108     %r = extractvalue { i64, i1 } %pair, 0
2109     ret i64 %r
2112 define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2113 ; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic:
2114 ; CHECK:    bl __atomic_compare_exchange
2115     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release monotonic, align 1
2116     %r = extractvalue { i64, i1 } %pair, 0
2117     ret i64 %r
2120 define dso_local i64 @cmpxchg_i64_unaligned_release_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2121 ; CHECK-LABEL: cmpxchg_i64_unaligned_release_monotonic_weak:
2122 ; CHECK:    bl __atomic_compare_exchange
2123     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release monotonic, align 1
2124     %r = extractvalue { i64, i1 } %pair, 0
2125     ret i64 %r
2128 define dso_local i64 @cmpxchg_i64_unaligned_release_acquire(i64 %expected, i64 %new, ptr %ptr) {
2129 ; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire:
2130 ; CHECK:    bl __atomic_compare_exchange
2131     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release acquire, align 1
2132     %r = extractvalue { i64, i1 } %pair, 0
2133     ret i64 %r
2136 define dso_local i64 @cmpxchg_i64_unaligned_release_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2137 ; CHECK-LABEL: cmpxchg_i64_unaligned_release_acquire_weak:
2138 ; CHECK:    bl __atomic_compare_exchange
2139     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release acquire, align 1
2140     %r = extractvalue { i64, i1 } %pair, 0
2141     ret i64 %r
2144 define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2145 ; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst:
2146 ; CHECK:    bl __atomic_compare_exchange
2147     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1
2148     %r = extractvalue { i64, i1 } %pair, 0
2149     ret i64 %r
2152 define dso_local i64 @cmpxchg_i64_unaligned_release_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2153 ; CHECK-LABEL: cmpxchg_i64_unaligned_release_seq_cst_weak:
2154 ; CHECK:    bl __atomic_compare_exchange
2155     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new release seq_cst, align 1
2156     %r = extractvalue { i64, i1 } %pair, 0
2157     ret i64 %r
2160 define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2161 ; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic:
2162 ; CHECK:    bl __atomic_compare_exchange
2163     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1
2164     %r = extractvalue { i64, i1 } %pair, 0
2165     ret i64 %r
2168 define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2169 ; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_monotonic_weak:
2170 ; CHECK:    bl __atomic_compare_exchange
2171     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel monotonic, align 1
2172     %r = extractvalue { i64, i1 } %pair, 0
2173     ret i64 %r
2176 define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire(i64 %expected, i64 %new, ptr %ptr) {
2177 ; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire:
2178 ; CHECK:    bl __atomic_compare_exchange
2179     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1
2180     %r = extractvalue { i64, i1 } %pair, 0
2181     ret i64 %r
2184 define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2185 ; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_acquire_weak:
2186 ; CHECK:    bl __atomic_compare_exchange
2187     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel acquire, align 1
2188     %r = extractvalue { i64, i1 } %pair, 0
2189     ret i64 %r
2192 define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2193 ; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst:
2194 ; CHECK:    bl __atomic_compare_exchange
2195     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1
2196     %r = extractvalue { i64, i1 } %pair, 0
2197     ret i64 %r
2200 define dso_local i64 @cmpxchg_i64_unaligned_acq_rel_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2201 ; CHECK-LABEL: cmpxchg_i64_unaligned_acq_rel_seq_cst_weak:
2202 ; CHECK:    bl __atomic_compare_exchange
2203     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new acq_rel seq_cst, align 1
2204     %r = extractvalue { i64, i1 } %pair, 0
2205     ret i64 %r
2208 define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic(i64 %expected, i64 %new, ptr %ptr) {
2209 ; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic:
2210 ; CHECK:    bl __atomic_compare_exchange
2211     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1
2212     %r = extractvalue { i64, i1 } %pair, 0
2213     ret i64 %r
2216 define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_monotonic_weak(i64 %expected, i64 %new, ptr %ptr) {
2217 ; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_monotonic_weak:
2218 ; CHECK:    bl __atomic_compare_exchange
2219     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst monotonic, align 1
2220     %r = extractvalue { i64, i1 } %pair, 0
2221     ret i64 %r
2224 define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire(i64 %expected, i64 %new, ptr %ptr) {
2225 ; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire:
2226 ; CHECK:    bl __atomic_compare_exchange
2227     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1
2228     %r = extractvalue { i64, i1 } %pair, 0
2229     ret i64 %r
2232 define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_acquire_weak(i64 %expected, i64 %new, ptr %ptr) {
2233 ; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_acquire_weak:
2234 ; CHECK:    bl __atomic_compare_exchange
2235     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst acquire, align 1
2236     %r = extractvalue { i64, i1 } %pair, 0
2237     ret i64 %r
2240 define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst(i64 %expected, i64 %new, ptr %ptr) {
2241 ; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst:
2242 ; CHECK:    bl __atomic_compare_exchange
2243     %pair = cmpxchg ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1
2244     %r = extractvalue { i64, i1 } %pair, 0
2245     ret i64 %r
2248 define dso_local i64 @cmpxchg_i64_unaligned_seq_cst_seq_cst_weak(i64 %expected, i64 %new, ptr %ptr) {
2249 ; CHECK-LABEL: cmpxchg_i64_unaligned_seq_cst_seq_cst_weak:
2250 ; CHECK:    bl __atomic_compare_exchange
2251     %pair = cmpxchg weak ptr %ptr, i64 %expected, i64 %new seq_cst seq_cst, align 1
2252     %r = extractvalue { i64, i1 } %pair, 0
2253     ret i64 %r
2256 define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2257 ; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic:
2258 ; CHECK:    bl __atomic_compare_exchange
2259     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1
2260     %r = extractvalue { i128, i1 } %pair, 0
2261     ret i128 %r
2264 define dso_local i128 @cmpxchg_i128_unaligned_monotonic_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2265 ; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_monotonic_weak:
2266 ; CHECK:    bl __atomic_compare_exchange
2267     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic monotonic, align 1
2268     %r = extractvalue { i128, i1 } %pair, 0
2269     ret i128 %r
2272 define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire(i128 %expected, i128 %new, ptr %ptr) {
2273 ; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire:
2274 ; CHECK:    bl __atomic_compare_exchange
2275     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1
2276     %r = extractvalue { i128, i1 } %pair, 0
2277     ret i128 %r
2280 define dso_local i128 @cmpxchg_i128_unaligned_monotonic_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2281 ; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_acquire_weak:
2282 ; CHECK:    bl __atomic_compare_exchange
2283     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic acquire, align 1
2284     %r = extractvalue { i128, i1 } %pair, 0
2285     ret i128 %r
2288 define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2289 ; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst:
2290 ; CHECK:    bl __atomic_compare_exchange
2291     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1
2292     %r = extractvalue { i128, i1 } %pair, 0
2293     ret i128 %r
2296 define dso_local i128 @cmpxchg_i128_unaligned_monotonic_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2297 ; CHECK-LABEL: cmpxchg_i128_unaligned_monotonic_seq_cst_weak:
2298 ; CHECK:    bl __atomic_compare_exchange
2299     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new monotonic seq_cst, align 1
2300     %r = extractvalue { i128, i1 } %pair, 0
2301     ret i128 %r
2304 define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2305 ; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic:
2306 ; CHECK:    bl __atomic_compare_exchange
2307     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1
2308     %r = extractvalue { i128, i1 } %pair, 0
2309     ret i128 %r
2312 define dso_local i128 @cmpxchg_i128_unaligned_acquire_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2313 ; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_monotonic_weak:
2314 ; CHECK:    bl __atomic_compare_exchange
2315     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire monotonic, align 1
2316     %r = extractvalue { i128, i1 } %pair, 0
2317     ret i128 %r
2320 define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire(i128 %expected, i128 %new, ptr %ptr) {
2321 ; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire:
2322 ; CHECK:    bl __atomic_compare_exchange
2323     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1
2324     %r = extractvalue { i128, i1 } %pair, 0
2325     ret i128 %r
2328 define dso_local i128 @cmpxchg_i128_unaligned_acquire_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2329 ; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_acquire_weak:
2330 ; CHECK:    bl __atomic_compare_exchange
2331     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire acquire, align 1
2332     %r = extractvalue { i128, i1 } %pair, 0
2333     ret i128 %r
2336 define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2337 ; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst:
2338 ; CHECK:    bl __atomic_compare_exchange
2339     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1
2340     %r = extractvalue { i128, i1 } %pair, 0
2341     ret i128 %r
2344 define dso_local i128 @cmpxchg_i128_unaligned_acquire_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2345 ; CHECK-LABEL: cmpxchg_i128_unaligned_acquire_seq_cst_weak:
2346 ; CHECK:    bl __atomic_compare_exchange
2347     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acquire seq_cst, align 1
2348     %r = extractvalue { i128, i1 } %pair, 0
2349     ret i128 %r
2352 define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2353 ; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic:
2354 ; CHECK:    bl __atomic_compare_exchange
2355     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release monotonic, align 1
2356     %r = extractvalue { i128, i1 } %pair, 0
2357     ret i128 %r
2360 define dso_local i128 @cmpxchg_i128_unaligned_release_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2361 ; CHECK-LABEL: cmpxchg_i128_unaligned_release_monotonic_weak:
2362 ; CHECK:    bl __atomic_compare_exchange
2363     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release monotonic, align 1
2364     %r = extractvalue { i128, i1 } %pair, 0
2365     ret i128 %r
2368 define dso_local i128 @cmpxchg_i128_unaligned_release_acquire(i128 %expected, i128 %new, ptr %ptr) {
2369 ; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire:
2370 ; CHECK:    bl __atomic_compare_exchange
2371     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release acquire, align 1
2372     %r = extractvalue { i128, i1 } %pair, 0
2373     ret i128 %r
2376 define dso_local i128 @cmpxchg_i128_unaligned_release_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2377 ; CHECK-LABEL: cmpxchg_i128_unaligned_release_acquire_weak:
2378 ; CHECK:    bl __atomic_compare_exchange
2379     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release acquire, align 1
2380     %r = extractvalue { i128, i1 } %pair, 0
2381     ret i128 %r
2384 define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2385 ; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst:
2386 ; CHECK:    bl __atomic_compare_exchange
2387     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1
2388     %r = extractvalue { i128, i1 } %pair, 0
2389     ret i128 %r
2392 define dso_local i128 @cmpxchg_i128_unaligned_release_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2393 ; CHECK-LABEL: cmpxchg_i128_unaligned_release_seq_cst_weak:
2394 ; CHECK:    bl __atomic_compare_exchange
2395     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new release seq_cst, align 1
2396     %r = extractvalue { i128, i1 } %pair, 0
2397     ret i128 %r
2400 define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2401 ; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic:
2402 ; CHECK:    bl __atomic_compare_exchange
2403     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1
2404     %r = extractvalue { i128, i1 } %pair, 0
2405     ret i128 %r
2408 define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2409 ; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_monotonic_weak:
2410 ; CHECK:    bl __atomic_compare_exchange
2411     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel monotonic, align 1
2412     %r = extractvalue { i128, i1 } %pair, 0
2413     ret i128 %r
2416 define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire(i128 %expected, i128 %new, ptr %ptr) {
2417 ; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire:
2418 ; CHECK:    bl __atomic_compare_exchange
2419     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1
2420     %r = extractvalue { i128, i1 } %pair, 0
2421     ret i128 %r
2424 define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2425 ; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_acquire_weak:
2426 ; CHECK:    bl __atomic_compare_exchange
2427     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel acquire, align 1
2428     %r = extractvalue { i128, i1 } %pair, 0
2429     ret i128 %r
2432 define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2433 ; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst:
2434 ; CHECK:    bl __atomic_compare_exchange
2435     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1
2436     %r = extractvalue { i128, i1 } %pair, 0
2437     ret i128 %r
2440 define dso_local i128 @cmpxchg_i128_unaligned_acq_rel_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2441 ; CHECK-LABEL: cmpxchg_i128_unaligned_acq_rel_seq_cst_weak:
2442 ; CHECK:    bl __atomic_compare_exchange
2443     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new acq_rel seq_cst, align 1
2444     %r = extractvalue { i128, i1 } %pair, 0
2445     ret i128 %r
2448 define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic(i128 %expected, i128 %new, ptr %ptr) {
2449 ; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic:
2450 ; CHECK:    bl __atomic_compare_exchange
2451     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1
2452     %r = extractvalue { i128, i1 } %pair, 0
2453     ret i128 %r
2456 define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_monotonic_weak(i128 %expected, i128 %new, ptr %ptr) {
2457 ; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_monotonic_weak:
2458 ; CHECK:    bl __atomic_compare_exchange
2459     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst monotonic, align 1
2460     %r = extractvalue { i128, i1 } %pair, 0
2461     ret i128 %r
2464 define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire(i128 %expected, i128 %new, ptr %ptr) {
2465 ; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire:
2466 ; CHECK:    bl __atomic_compare_exchange
2467     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1
2468     %r = extractvalue { i128, i1 } %pair, 0
2469     ret i128 %r
2472 define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_acquire_weak(i128 %expected, i128 %new, ptr %ptr) {
2473 ; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_acquire_weak:
2474 ; CHECK:    bl __atomic_compare_exchange
2475     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst acquire, align 1
2476     %r = extractvalue { i128, i1 } %pair, 0
2477     ret i128 %r
2480 define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst(i128 %expected, i128 %new, ptr %ptr) {
2481 ; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst:
2482 ; CHECK:    bl __atomic_compare_exchange
2483     %pair = cmpxchg ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1
2484     %r = extractvalue { i128, i1 } %pair, 0
2485     ret i128 %r
2488 define dso_local i128 @cmpxchg_i128_unaligned_seq_cst_seq_cst_weak(i128 %expected, i128 %new, ptr %ptr) {
2489 ; CHECK-LABEL: cmpxchg_i128_unaligned_seq_cst_seq_cst_weak:
2490 ; CHECK:    bl __atomic_compare_exchange
2491     %pair = cmpxchg weak ptr %ptr, i128 %expected, i128 %new seq_cst seq_cst, align 1
2492     %r = extractvalue { i128, i1 } %pair, 0
2493     ret i128 %r