xref: /llvm-project/llvm/test/CodeGen/AArch64/Atomics/aarch64-cmpxchg-v8_1a.ll (revision f3fb973924a9ba3bdd8dfee4dc85337e8b033ab4)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st[^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
5
6define 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
12}
13
14define 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
20}
21
22define 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
28}
29
30define 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
36}
37
38define 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
44}
45
46define 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
52}
53
54define 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
60}
61
62define 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
68}
69
70define 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
76}
77
78define 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
84}
85
86define 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
92}
93
94define 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
100}
101
102define 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
108}
109
110define 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
116}
117
118define 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
124}
125
126define 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
132}
133
134define 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
140}
141
142define 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
148}
149
150define 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
156}
157
158define 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
164}
165
166define 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
172}
173
174define 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
180}
181
182define 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
188}
189
190define 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
196}
197
198define 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
204}
205
206define 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
212}
213
214define 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
220}
221
222define 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
228}
229
230define 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
236}
237
238define 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
244}
245
246define 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
252}
253
254define 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
260}
261
262define 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
268}
269
270define 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
276}
277
278define 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
284}
285
286define 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
292}
293
294define 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
300}
301
302define 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
308}
309
310define 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
316}
317
318define 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
324}
325
326define 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
332}
333
334define 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
340}
341
342define 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
348}
349
350define 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
356}
357
358define 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
364}
365
366define 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
372}
373
374define 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
380}
381
382define 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
388}
389
390define 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
396}
397
398define 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
404}
405
406define 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
412}
413
414define 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
420}
421
422define 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
428}
429
430define 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
436}
437
438define 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
444}
445
446define 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
452}
453
454define 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
460}
461
462define 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
468}
469
470define 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
476}
477
478define 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
484}
485
486define 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
492}
493
494define 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
500}
501
502define 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
508}
509
510define 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
516}
517
518define 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
524}
525
526define 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
532}
533
534define 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
540}
541
542define 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
548}
549
550define 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
556}
557
558define 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
564}
565
566define 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
572}
573
574define 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
580}
581
582define 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
588}
589
590define 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
596}
597
598define 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
604}
605
606define 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
612}
613
614define 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
620}
621
622define 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
628}
629
630define 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
636}
637
638define 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
644}
645
646define 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
652}
653
654define 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
660}
661
662define 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
668}
669
670define 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
676}
677
678define 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
684}
685
686define 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
692}
693
694define 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
700}
701
702define 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
708}
709
710define 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
716}
717
718define 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
724}
725
726define 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
732}
733
734define 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
740}
741
742define 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
748}
749
750define 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
756}
757
758define 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
764}
765
766define 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
772}
773
774define 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
780}
781
782define 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
788}
789
790define 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
796}
797
798define 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
804}
805
806define 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
812}
813
814define 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
820}
821
822define 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
828}
829
830define 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
836}
837
838define 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
844}
845
846define 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
852}
853
854define 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
860}
861
862define 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
868}
869
870define 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
876}
877
878define 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
884}
885
886define 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
892}
893
894define 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
900}
901
902define 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
908}
909
910define 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
916}
917
918define 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
924}
925
926define 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
932}
933
934define 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
940}
941
942define 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
948}
949
950define 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
956}
957
958define 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
964}
965
966define 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]
969;
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
975}
976
977define 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]
980;
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
986}
987
988define 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]
991;
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
997}
998
999define 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]
1002;
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
1008}
1009
1010define 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]
1013;
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
1019}
1020
1021define 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]
1024;
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
1030}
1031
1032define 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]
1035;
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
1041}
1042
1043define 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]
1046;
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
1052}
1053
1054define 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]
1057;
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
1063}
1064
1065define 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]
1068;
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
1074}
1075
1076define 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]
1079;
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
1085}
1086
1087define 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]
1090;
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
1096}
1097
1098define 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]
1101;
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
1107}
1108
1109define 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]
1112;
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
1118}
1119
1120define 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]
1123;
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
1129}
1130
1131define 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]
1134;
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
1140}
1141
1142define 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]
1145;
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
1151}
1152
1153define 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]
1156;
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
1162}
1163
1164define 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]
1167;
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
1173}
1174
1175define 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]
1178;
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
1184}
1185
1186define 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]
1189;
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
1195}
1196
1197define 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]
1200;
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
1206}
1207
1208define 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]
1211;
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
1217}
1218
1219define 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]
1222;
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
1228}
1229
1230define 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]
1233;
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
1239}
1240
1241define 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]
1244;
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
1250}
1251
1252define 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]
1255;
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
1261}
1262
1263define 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]
1266;
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
1272}
1273
1274define 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]
1277;
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
1283}
1284
1285define 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]
1288;
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
1294}
1295
1296define 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
1302}
1303
1304define 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
1310}
1311
1312define 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
1318}
1319
1320define 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
1326}
1327
1328define 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
1334}
1335
1336define 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
1342}
1343
1344define 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
1350}
1351
1352define 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
1358}
1359
1360define 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
1366}
1367
1368define 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
1374}
1375
1376define 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
1382}
1383
1384define 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
1390}
1391
1392define 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
1398}
1399
1400define 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
1406}
1407
1408define 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
1414}
1415
1416define 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
1422}
1423
1424define 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
1430}
1431
1432define 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
1438}
1439
1440define 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
1446}
1447
1448define 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
1454}
1455
1456define 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
1462}
1463
1464define 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
1470}
1471
1472define 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
1478}
1479
1480define 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
1486}
1487
1488define 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
1494}
1495
1496define 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
1502}
1503
1504define 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
1510}
1511
1512define 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
1518}
1519
1520define 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
1526}
1527
1528define 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
1534}
1535
1536define 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
1542}
1543
1544define 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
1550}
1551
1552define 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
1558}
1559
1560define 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
1566}
1567
1568define 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
1574}
1575
1576define 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
1582}
1583
1584define 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
1590}
1591
1592define 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
1598}
1599
1600define 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
1606}
1607
1608define 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
1614}
1615
1616define 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
1622}
1623
1624define 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
1630}
1631
1632define 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
1638}
1639
1640define 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
1646}
1647
1648define 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
1654}
1655
1656define 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
1662}
1663
1664define 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
1670}
1671
1672define 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
1678}
1679
1680define 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
1686}
1687
1688define 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
1694}
1695
1696define 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
1702}
1703
1704define 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
1710}
1711
1712define 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
1718}
1719
1720define 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
1726}
1727
1728define 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
1734}
1735
1736define 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
1742}
1743
1744define 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
1750}
1751
1752define 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
1758}
1759
1760define 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
1766}
1767
1768define 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
1774}
1775
1776define 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
1782}
1783
1784define 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
1790}
1791
1792define 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
1798}
1799
1800define 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
1806}
1807
1808define 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
1814}
1815
1816define 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
1822}
1823
1824define 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
1830}
1831
1832define 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
1838}
1839
1840define 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
1846}
1847
1848define 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
1854}
1855
1856define 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
1862}
1863
1864define 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
1870}
1871
1872define 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
1878}
1879
1880define 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
1886}
1887
1888define 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
1894}
1895
1896define 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
1902}
1903
1904define 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
1910}
1911
1912define 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
1918}
1919
1920define 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
1926}
1927
1928define 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
1934}
1935
1936define 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
1942}
1943
1944define 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
1950}
1951
1952define 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
1958}
1959
1960define 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
1966}
1967
1968define 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
1974}
1975
1976define 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
1982}
1983
1984define 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
1990}
1991
1992define 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
1998}
1999
2000define 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
2006}
2007
2008define 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
2014}
2015
2016define 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
2022}
2023
2024define 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
2030}
2031
2032define 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
2038}
2039
2040define 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
2046}
2047
2048define 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
2054}
2055
2056define 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
2062}
2063
2064define 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
2070}
2071
2072define 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
2078}
2079
2080define 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
2086}
2087
2088define 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
2094}
2095
2096define 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
2102}
2103
2104define 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
2110}
2111
2112define 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
2118}
2119
2120define 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
2126}
2127
2128define 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
2134}
2135
2136define 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
2142}
2143
2144define 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
2150}
2151
2152define 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
2158}
2159
2160define 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
2166}
2167
2168define 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
2174}
2175
2176define 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
2182}
2183
2184define 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
2190}
2191
2192define 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
2198}
2199
2200define 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
2206}
2207
2208define 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
2214}
2215
2216define 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
2222}
2223
2224define 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
2230}
2231
2232define 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
2238}
2239
2240define 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
2246}
2247
2248define 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
2254}
2255
2256define 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
2262}
2263
2264define 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
2270}
2271
2272define 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
2278}
2279
2280define 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
2286}
2287
2288define 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
2294}
2295
2296define 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
2302}
2303
2304define 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
2310}
2311
2312define 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
2318}
2319
2320define 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
2326}
2327
2328define 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
2334}
2335
2336define 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
2342}
2343
2344define 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
2350}
2351
2352define 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
2358}
2359
2360define 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
2366}
2367
2368define 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
2374}
2375
2376define 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
2382}
2383
2384define 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
2390}
2391
2392define 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
2398}
2399
2400define 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
2406}
2407
2408define 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
2414}
2415
2416define 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
2422}
2423
2424define 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
2430}
2431
2432define 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
2438}
2439
2440define 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
2446}
2447
2448define 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
2454}
2455
2456define 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
2462}
2463
2464define 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
2470}
2471
2472define 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
2478}
2479
2480define 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
2486}
2487
2488define 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
2494}
2495