1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s \
3; RUN:   | FileCheck -check-prefix=CSKY %s
4
5define i8 @atomicrmw_xchg_i8_monotonic(i8* %a, i8 %b) nounwind {
6; CSKY-LABEL: atomicrmw_xchg_i8_monotonic:
7; CSKY:       # %bb.0:
8; CSKY-NEXT:    subi16 sp, sp, 4
9; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
10; CSKY-NEXT:    movi16 a2, 0
11; CSKY-NEXT:    jsri32 [.LCPI0_0]
12; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
13; CSKY-NEXT:    addi16 sp, sp, 4
14; CSKY-NEXT:    rts16
15; CSKY-NEXT:    .p2align 1
16; CSKY-NEXT:  # %bb.1:
17; CSKY-NEXT:    .p2align 2
18; CSKY-NEXT:  .LCPI0_0:
19; CSKY-NEXT:    .long __atomic_exchange_1
20;
21  %1 = atomicrmw xchg i8* %a, i8 %b monotonic
22  ret i8 %1
23}
24
25define i8 @atomicrmw_xchg_i8_acquire(i8* %a, i8 %b) nounwind {
26; CSKY-LABEL: atomicrmw_xchg_i8_acquire:
27; CSKY:       # %bb.0:
28; CSKY-NEXT:    subi16 sp, sp, 4
29; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
30; CSKY-NEXT:    movi16 a2, 2
31; CSKY-NEXT:    jsri32 [.LCPI1_0]
32; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
33; CSKY-NEXT:    addi16 sp, sp, 4
34; CSKY-NEXT:    rts16
35; CSKY-NEXT:    .p2align 1
36; CSKY-NEXT:  # %bb.1:
37; CSKY-NEXT:    .p2align 2
38; CSKY-NEXT:  .LCPI1_0:
39; CSKY-NEXT:    .long __atomic_exchange_1
40;
41  %1 = atomicrmw xchg i8* %a, i8 %b acquire
42  ret i8 %1
43}
44
45define i8 @atomicrmw_xchg_i8_release(i8* %a, i8 %b) nounwind {
46; CSKY-LABEL: atomicrmw_xchg_i8_release:
47; CSKY:       # %bb.0:
48; CSKY-NEXT:    subi16 sp, sp, 4
49; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
50; CSKY-NEXT:    movi16 a2, 3
51; CSKY-NEXT:    jsri32 [.LCPI2_0]
52; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
53; CSKY-NEXT:    addi16 sp, sp, 4
54; CSKY-NEXT:    rts16
55; CSKY-NEXT:    .p2align 1
56; CSKY-NEXT:  # %bb.1:
57; CSKY-NEXT:    .p2align 2
58; CSKY-NEXT:  .LCPI2_0:
59; CSKY-NEXT:    .long __atomic_exchange_1
60;
61  %1 = atomicrmw xchg i8* %a, i8 %b release
62  ret i8 %1
63}
64
65define i8 @atomicrmw_xchg_i8_acq_rel(i8* %a, i8 %b) nounwind {
66; CSKY-LABEL: atomicrmw_xchg_i8_acq_rel:
67; CSKY:       # %bb.0:
68; CSKY-NEXT:    subi16 sp, sp, 4
69; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
70; CSKY-NEXT:    movi16 a2, 4
71; CSKY-NEXT:    jsri32 [.LCPI3_0]
72; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
73; CSKY-NEXT:    addi16 sp, sp, 4
74; CSKY-NEXT:    rts16
75; CSKY-NEXT:    .p2align 1
76; CSKY-NEXT:  # %bb.1:
77; CSKY-NEXT:    .p2align 2
78; CSKY-NEXT:  .LCPI3_0:
79; CSKY-NEXT:    .long __atomic_exchange_1
80;
81  %1 = atomicrmw xchg i8* %a, i8 %b acq_rel
82  ret i8 %1
83}
84
85define i8 @atomicrmw_xchg_i8_seq_cst(i8* %a, i8 %b) nounwind {
86; CSKY-LABEL: atomicrmw_xchg_i8_seq_cst:
87; CSKY:       # %bb.0:
88; CSKY-NEXT:    subi16 sp, sp, 4
89; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
90; CSKY-NEXT:    movi16 a2, 5
91; CSKY-NEXT:    jsri32 [.LCPI4_0]
92; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
93; CSKY-NEXT:    addi16 sp, sp, 4
94; CSKY-NEXT:    rts16
95; CSKY-NEXT:    .p2align 1
96; CSKY-NEXT:  # %bb.1:
97; CSKY-NEXT:    .p2align 2
98; CSKY-NEXT:  .LCPI4_0:
99; CSKY-NEXT:    .long __atomic_exchange_1
100;
101  %1 = atomicrmw xchg i8* %a, i8 %b seq_cst
102  ret i8 %1
103}
104
105define i8 @atomicrmw_add_i8_monotonic(i8 *%a, i8 %b) nounwind {
106; CSKY-LABEL: atomicrmw_add_i8_monotonic:
107; CSKY:       # %bb.0:
108; CSKY-NEXT:    subi16 sp, sp, 4
109; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
110; CSKY-NEXT:    movi16 a2, 0
111; CSKY-NEXT:    jsri32 [.LCPI5_0]
112; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
113; CSKY-NEXT:    addi16 sp, sp, 4
114; CSKY-NEXT:    rts16
115; CSKY-NEXT:    .p2align 1
116; CSKY-NEXT:  # %bb.1:
117; CSKY-NEXT:    .p2align 2
118; CSKY-NEXT:  .LCPI5_0:
119; CSKY-NEXT:    .long __atomic_fetch_add_1
120;
121  %1 = atomicrmw add i8* %a, i8 %b monotonic
122  ret i8 %1
123}
124
125define i8 @atomicrmw_add_i8_acquire(i8 *%a, i8 %b) nounwind {
126; CSKY-LABEL: atomicrmw_add_i8_acquire:
127; CSKY:       # %bb.0:
128; CSKY-NEXT:    subi16 sp, sp, 4
129; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
130; CSKY-NEXT:    movi16 a2, 2
131; CSKY-NEXT:    jsri32 [.LCPI6_0]
132; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
133; CSKY-NEXT:    addi16 sp, sp, 4
134; CSKY-NEXT:    rts16
135; CSKY-NEXT:    .p2align 1
136; CSKY-NEXT:  # %bb.1:
137; CSKY-NEXT:    .p2align 2
138; CSKY-NEXT:  .LCPI6_0:
139; CSKY-NEXT:    .long __atomic_fetch_add_1
140;
141  %1 = atomicrmw add i8* %a, i8 %b acquire
142  ret i8 %1
143}
144
145define i8 @atomicrmw_add_i8_release(i8 *%a, i8 %b) nounwind {
146; CSKY-LABEL: atomicrmw_add_i8_release:
147; CSKY:       # %bb.0:
148; CSKY-NEXT:    subi16 sp, sp, 4
149; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
150; CSKY-NEXT:    movi16 a2, 3
151; CSKY-NEXT:    jsri32 [.LCPI7_0]
152; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
153; CSKY-NEXT:    addi16 sp, sp, 4
154; CSKY-NEXT:    rts16
155; CSKY-NEXT:    .p2align 1
156; CSKY-NEXT:  # %bb.1:
157; CSKY-NEXT:    .p2align 2
158; CSKY-NEXT:  .LCPI7_0:
159; CSKY-NEXT:    .long __atomic_fetch_add_1
160;
161  %1 = atomicrmw add i8* %a, i8 %b release
162  ret i8 %1
163}
164
165define i8 @atomicrmw_add_i8_acq_rel(i8 *%a, i8 %b) nounwind {
166; CSKY-LABEL: atomicrmw_add_i8_acq_rel:
167; CSKY:       # %bb.0:
168; CSKY-NEXT:    subi16 sp, sp, 4
169; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
170; CSKY-NEXT:    movi16 a2, 4
171; CSKY-NEXT:    jsri32 [.LCPI8_0]
172; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
173; CSKY-NEXT:    addi16 sp, sp, 4
174; CSKY-NEXT:    rts16
175; CSKY-NEXT:    .p2align 1
176; CSKY-NEXT:  # %bb.1:
177; CSKY-NEXT:    .p2align 2
178; CSKY-NEXT:  .LCPI8_0:
179; CSKY-NEXT:    .long __atomic_fetch_add_1
180;
181  %1 = atomicrmw add i8* %a, i8 %b acq_rel
182  ret i8 %1
183}
184
185define i8 @atomicrmw_add_i8_seq_cst(i8 *%a, i8 %b) nounwind {
186; CSKY-LABEL: atomicrmw_add_i8_seq_cst:
187; CSKY:       # %bb.0:
188; CSKY-NEXT:    subi16 sp, sp, 4
189; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
190; CSKY-NEXT:    movi16 a2, 5
191; CSKY-NEXT:    jsri32 [.LCPI9_0]
192; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
193; CSKY-NEXT:    addi16 sp, sp, 4
194; CSKY-NEXT:    rts16
195; CSKY-NEXT:    .p2align 1
196; CSKY-NEXT:  # %bb.1:
197; CSKY-NEXT:    .p2align 2
198; CSKY-NEXT:  .LCPI9_0:
199; CSKY-NEXT:    .long __atomic_fetch_add_1
200;
201  %1 = atomicrmw add i8* %a, i8 %b seq_cst
202  ret i8 %1
203}
204
205define i8 @atomicrmw_sub_i8_monotonic(i8* %a, i8 %b) nounwind {
206; CSKY-LABEL: atomicrmw_sub_i8_monotonic:
207; CSKY:       # %bb.0:
208; CSKY-NEXT:    subi16 sp, sp, 4
209; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
210; CSKY-NEXT:    movi16 a2, 0
211; CSKY-NEXT:    jsri32 [.LCPI10_0]
212; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
213; CSKY-NEXT:    addi16 sp, sp, 4
214; CSKY-NEXT:    rts16
215; CSKY-NEXT:    .p2align 1
216; CSKY-NEXT:  # %bb.1:
217; CSKY-NEXT:    .p2align 2
218; CSKY-NEXT:  .LCPI10_0:
219; CSKY-NEXT:    .long __atomic_fetch_sub_1
220;
221  %1 = atomicrmw sub i8* %a, i8 %b monotonic
222  ret i8 %1
223}
224
225define i8 @atomicrmw_sub_i8_acquire(i8* %a, i8 %b) nounwind {
226; CSKY-LABEL: atomicrmw_sub_i8_acquire:
227; CSKY:       # %bb.0:
228; CSKY-NEXT:    subi16 sp, sp, 4
229; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
230; CSKY-NEXT:    movi16 a2, 2
231; CSKY-NEXT:    jsri32 [.LCPI11_0]
232; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
233; CSKY-NEXT:    addi16 sp, sp, 4
234; CSKY-NEXT:    rts16
235; CSKY-NEXT:    .p2align 1
236; CSKY-NEXT:  # %bb.1:
237; CSKY-NEXT:    .p2align 2
238; CSKY-NEXT:  .LCPI11_0:
239; CSKY-NEXT:    .long __atomic_fetch_sub_1
240;
241  %1 = atomicrmw sub i8* %a, i8 %b acquire
242  ret i8 %1
243}
244
245define i8 @atomicrmw_sub_i8_release(i8* %a, i8 %b) nounwind {
246; CSKY-LABEL: atomicrmw_sub_i8_release:
247; CSKY:       # %bb.0:
248; CSKY-NEXT:    subi16 sp, sp, 4
249; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
250; CSKY-NEXT:    movi16 a2, 3
251; CSKY-NEXT:    jsri32 [.LCPI12_0]
252; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
253; CSKY-NEXT:    addi16 sp, sp, 4
254; CSKY-NEXT:    rts16
255; CSKY-NEXT:    .p2align 1
256; CSKY-NEXT:  # %bb.1:
257; CSKY-NEXT:    .p2align 2
258; CSKY-NEXT:  .LCPI12_0:
259; CSKY-NEXT:    .long __atomic_fetch_sub_1
260;
261  %1 = atomicrmw sub i8* %a, i8 %b release
262  ret i8 %1
263}
264
265define i8 @atomicrmw_sub_i8_acq_rel(i8* %a, i8 %b) nounwind {
266; CSKY-LABEL: atomicrmw_sub_i8_acq_rel:
267; CSKY:       # %bb.0:
268; CSKY-NEXT:    subi16 sp, sp, 4
269; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
270; CSKY-NEXT:    movi16 a2, 4
271; CSKY-NEXT:    jsri32 [.LCPI13_0]
272; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
273; CSKY-NEXT:    addi16 sp, sp, 4
274; CSKY-NEXT:    rts16
275; CSKY-NEXT:    .p2align 1
276; CSKY-NEXT:  # %bb.1:
277; CSKY-NEXT:    .p2align 2
278; CSKY-NEXT:  .LCPI13_0:
279; CSKY-NEXT:    .long __atomic_fetch_sub_1
280;
281  %1 = atomicrmw sub i8* %a, i8 %b acq_rel
282  ret i8 %1
283}
284
285define i8 @atomicrmw_sub_i8_seq_cst(i8* %a, i8 %b) nounwind {
286; CSKY-LABEL: atomicrmw_sub_i8_seq_cst:
287; CSKY:       # %bb.0:
288; CSKY-NEXT:    subi16 sp, sp, 4
289; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
290; CSKY-NEXT:    movi16 a2, 5
291; CSKY-NEXT:    jsri32 [.LCPI14_0]
292; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
293; CSKY-NEXT:    addi16 sp, sp, 4
294; CSKY-NEXT:    rts16
295; CSKY-NEXT:    .p2align 1
296; CSKY-NEXT:  # %bb.1:
297; CSKY-NEXT:    .p2align 2
298; CSKY-NEXT:  .LCPI14_0:
299; CSKY-NEXT:    .long __atomic_fetch_sub_1
300;
301  %1 = atomicrmw sub i8* %a, i8 %b seq_cst
302  ret i8 %1
303}
304
305define i8 @atomicrmw_and_i8_monotonic(i8 *%a, i8 %b) nounwind {
306; CSKY-LABEL: atomicrmw_and_i8_monotonic:
307; CSKY:       # %bb.0:
308; CSKY-NEXT:    subi16 sp, sp, 4
309; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
310; CSKY-NEXT:    movi16 a2, 0
311; CSKY-NEXT:    jsri32 [.LCPI15_0]
312; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
313; CSKY-NEXT:    addi16 sp, sp, 4
314; CSKY-NEXT:    rts16
315; CSKY-NEXT:    .p2align 1
316; CSKY-NEXT:  # %bb.1:
317; CSKY-NEXT:    .p2align 2
318; CSKY-NEXT:  .LCPI15_0:
319; CSKY-NEXT:    .long __atomic_fetch_and_1
320;
321  %1 = atomicrmw and i8* %a, i8 %b monotonic
322  ret i8 %1
323}
324
325define i8 @atomicrmw_and_i8_acquire(i8 *%a, i8 %b) nounwind {
326; CSKY-LABEL: atomicrmw_and_i8_acquire:
327; CSKY:       # %bb.0:
328; CSKY-NEXT:    subi16 sp, sp, 4
329; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
330; CSKY-NEXT:    movi16 a2, 2
331; CSKY-NEXT:    jsri32 [.LCPI16_0]
332; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
333; CSKY-NEXT:    addi16 sp, sp, 4
334; CSKY-NEXT:    rts16
335; CSKY-NEXT:    .p2align 1
336; CSKY-NEXT:  # %bb.1:
337; CSKY-NEXT:    .p2align 2
338; CSKY-NEXT:  .LCPI16_0:
339; CSKY-NEXT:    .long __atomic_fetch_and_1
340;
341  %1 = atomicrmw and i8* %a, i8 %b acquire
342  ret i8 %1
343}
344
345define i8 @atomicrmw_and_i8_release(i8 *%a, i8 %b) nounwind {
346; CSKY-LABEL: atomicrmw_and_i8_release:
347; CSKY:       # %bb.0:
348; CSKY-NEXT:    subi16 sp, sp, 4
349; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
350; CSKY-NEXT:    movi16 a2, 3
351; CSKY-NEXT:    jsri32 [.LCPI17_0]
352; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
353; CSKY-NEXT:    addi16 sp, sp, 4
354; CSKY-NEXT:    rts16
355; CSKY-NEXT:    .p2align 1
356; CSKY-NEXT:  # %bb.1:
357; CSKY-NEXT:    .p2align 2
358; CSKY-NEXT:  .LCPI17_0:
359; CSKY-NEXT:    .long __atomic_fetch_and_1
360;
361  %1 = atomicrmw and i8* %a, i8 %b release
362  ret i8 %1
363}
364
365define i8 @atomicrmw_and_i8_acq_rel(i8 *%a, i8 %b) nounwind {
366; CSKY-LABEL: atomicrmw_and_i8_acq_rel:
367; CSKY:       # %bb.0:
368; CSKY-NEXT:    subi16 sp, sp, 4
369; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
370; CSKY-NEXT:    movi16 a2, 4
371; CSKY-NEXT:    jsri32 [.LCPI18_0]
372; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
373; CSKY-NEXT:    addi16 sp, sp, 4
374; CSKY-NEXT:    rts16
375; CSKY-NEXT:    .p2align 1
376; CSKY-NEXT:  # %bb.1:
377; CSKY-NEXT:    .p2align 2
378; CSKY-NEXT:  .LCPI18_0:
379; CSKY-NEXT:    .long __atomic_fetch_and_1
380;
381  %1 = atomicrmw and i8* %a, i8 %b acq_rel
382  ret i8 %1
383}
384
385define i8 @atomicrmw_and_i8_seq_cst(i8 *%a, i8 %b) nounwind {
386; CSKY-LABEL: atomicrmw_and_i8_seq_cst:
387; CSKY:       # %bb.0:
388; CSKY-NEXT:    subi16 sp, sp, 4
389; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
390; CSKY-NEXT:    movi16 a2, 5
391; CSKY-NEXT:    jsri32 [.LCPI19_0]
392; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
393; CSKY-NEXT:    addi16 sp, sp, 4
394; CSKY-NEXT:    rts16
395; CSKY-NEXT:    .p2align 1
396; CSKY-NEXT:  # %bb.1:
397; CSKY-NEXT:    .p2align 2
398; CSKY-NEXT:  .LCPI19_0:
399; CSKY-NEXT:    .long __atomic_fetch_and_1
400;
401  %1 = atomicrmw and i8* %a, i8 %b seq_cst
402  ret i8 %1
403}
404
405define i8 @atomicrmw_nand_i8_monotonic(i8* %a, i8 %b) nounwind {
406; CSKY-LABEL: atomicrmw_nand_i8_monotonic:
407; CSKY:       # %bb.0:
408; CSKY-NEXT:    subi16 sp, sp, 4
409; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
410; CSKY-NEXT:    movi16 a2, 0
411; CSKY-NEXT:    jsri32 [.LCPI20_0]
412; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
413; CSKY-NEXT:    addi16 sp, sp, 4
414; CSKY-NEXT:    rts16
415; CSKY-NEXT:    .p2align 1
416; CSKY-NEXT:  # %bb.1:
417; CSKY-NEXT:    .p2align 2
418; CSKY-NEXT:  .LCPI20_0:
419; CSKY-NEXT:    .long __atomic_fetch_nand_1
420;
421  %1 = atomicrmw nand i8* %a, i8 %b monotonic
422  ret i8 %1
423}
424
425define i8 @atomicrmw_nand_i8_acquire(i8* %a, i8 %b) nounwind {
426; CSKY-LABEL: atomicrmw_nand_i8_acquire:
427; CSKY:       # %bb.0:
428; CSKY-NEXT:    subi16 sp, sp, 4
429; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
430; CSKY-NEXT:    movi16 a2, 2
431; CSKY-NEXT:    jsri32 [.LCPI21_0]
432; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
433; CSKY-NEXT:    addi16 sp, sp, 4
434; CSKY-NEXT:    rts16
435; CSKY-NEXT:    .p2align 1
436; CSKY-NEXT:  # %bb.1:
437; CSKY-NEXT:    .p2align 2
438; CSKY-NEXT:  .LCPI21_0:
439; CSKY-NEXT:    .long __atomic_fetch_nand_1
440;
441  %1 = atomicrmw nand i8* %a, i8 %b acquire
442  ret i8 %1
443}
444
445define i8 @atomicrmw_nand_i8_release(i8* %a, i8 %b) nounwind {
446; CSKY-LABEL: atomicrmw_nand_i8_release:
447; CSKY:       # %bb.0:
448; CSKY-NEXT:    subi16 sp, sp, 4
449; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
450; CSKY-NEXT:    movi16 a2, 3
451; CSKY-NEXT:    jsri32 [.LCPI22_0]
452; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
453; CSKY-NEXT:    addi16 sp, sp, 4
454; CSKY-NEXT:    rts16
455; CSKY-NEXT:    .p2align 1
456; CSKY-NEXT:  # %bb.1:
457; CSKY-NEXT:    .p2align 2
458; CSKY-NEXT:  .LCPI22_0:
459; CSKY-NEXT:    .long __atomic_fetch_nand_1
460;
461  %1 = atomicrmw nand i8* %a, i8 %b release
462  ret i8 %1
463}
464
465define i8 @atomicrmw_nand_i8_acq_rel(i8* %a, i8 %b) nounwind {
466; CSKY-LABEL: atomicrmw_nand_i8_acq_rel:
467; CSKY:       # %bb.0:
468; CSKY-NEXT:    subi16 sp, sp, 4
469; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
470; CSKY-NEXT:    movi16 a2, 4
471; CSKY-NEXT:    jsri32 [.LCPI23_0]
472; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
473; CSKY-NEXT:    addi16 sp, sp, 4
474; CSKY-NEXT:    rts16
475; CSKY-NEXT:    .p2align 1
476; CSKY-NEXT:  # %bb.1:
477; CSKY-NEXT:    .p2align 2
478; CSKY-NEXT:  .LCPI23_0:
479; CSKY-NEXT:    .long __atomic_fetch_nand_1
480;
481  %1 = atomicrmw nand i8* %a, i8 %b acq_rel
482  ret i8 %1
483}
484
485define i8 @atomicrmw_nand_i8_seq_cst(i8* %a, i8 %b) nounwind {
486; CSKY-LABEL: atomicrmw_nand_i8_seq_cst:
487; CSKY:       # %bb.0:
488; CSKY-NEXT:    subi16 sp, sp, 4
489; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
490; CSKY-NEXT:    movi16 a2, 5
491; CSKY-NEXT:    jsri32 [.LCPI24_0]
492; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
493; CSKY-NEXT:    addi16 sp, sp, 4
494; CSKY-NEXT:    rts16
495; CSKY-NEXT:    .p2align 1
496; CSKY-NEXT:  # %bb.1:
497; CSKY-NEXT:    .p2align 2
498; CSKY-NEXT:  .LCPI24_0:
499; CSKY-NEXT:    .long __atomic_fetch_nand_1
500;
501  %1 = atomicrmw nand i8* %a, i8 %b seq_cst
502  ret i8 %1
503}
504
505define i8 @atomicrmw_or_i8_monotonic(i8 *%a, i8 %b) nounwind {
506; CSKY-LABEL: atomicrmw_or_i8_monotonic:
507; CSKY:       # %bb.0:
508; CSKY-NEXT:    subi16 sp, sp, 4
509; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
510; CSKY-NEXT:    movi16 a2, 0
511; CSKY-NEXT:    jsri32 [.LCPI25_0]
512; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
513; CSKY-NEXT:    addi16 sp, sp, 4
514; CSKY-NEXT:    rts16
515; CSKY-NEXT:    .p2align 1
516; CSKY-NEXT:  # %bb.1:
517; CSKY-NEXT:    .p2align 2
518; CSKY-NEXT:  .LCPI25_0:
519; CSKY-NEXT:    .long __atomic_fetch_or_1
520;
521  %1 = atomicrmw or i8* %a, i8 %b monotonic
522  ret i8 %1
523}
524
525define i8 @atomicrmw_or_i8_acquire(i8 *%a, i8 %b) nounwind {
526; CSKY-LABEL: atomicrmw_or_i8_acquire:
527; CSKY:       # %bb.0:
528; CSKY-NEXT:    subi16 sp, sp, 4
529; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
530; CSKY-NEXT:    movi16 a2, 2
531; CSKY-NEXT:    jsri32 [.LCPI26_0]
532; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
533; CSKY-NEXT:    addi16 sp, sp, 4
534; CSKY-NEXT:    rts16
535; CSKY-NEXT:    .p2align 1
536; CSKY-NEXT:  # %bb.1:
537; CSKY-NEXT:    .p2align 2
538; CSKY-NEXT:  .LCPI26_0:
539; CSKY-NEXT:    .long __atomic_fetch_or_1
540;
541  %1 = atomicrmw or i8* %a, i8 %b acquire
542  ret i8 %1
543}
544
545define i8 @atomicrmw_or_i8_release(i8 *%a, i8 %b) nounwind {
546; CSKY-LABEL: atomicrmw_or_i8_release:
547; CSKY:       # %bb.0:
548; CSKY-NEXT:    subi16 sp, sp, 4
549; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
550; CSKY-NEXT:    movi16 a2, 3
551; CSKY-NEXT:    jsri32 [.LCPI27_0]
552; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
553; CSKY-NEXT:    addi16 sp, sp, 4
554; CSKY-NEXT:    rts16
555; CSKY-NEXT:    .p2align 1
556; CSKY-NEXT:  # %bb.1:
557; CSKY-NEXT:    .p2align 2
558; CSKY-NEXT:  .LCPI27_0:
559; CSKY-NEXT:    .long __atomic_fetch_or_1
560;
561  %1 = atomicrmw or i8* %a, i8 %b release
562  ret i8 %1
563}
564
565define i8 @atomicrmw_or_i8_acq_rel(i8 *%a, i8 %b) nounwind {
566; CSKY-LABEL: atomicrmw_or_i8_acq_rel:
567; CSKY:       # %bb.0:
568; CSKY-NEXT:    subi16 sp, sp, 4
569; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
570; CSKY-NEXT:    movi16 a2, 4
571; CSKY-NEXT:    jsri32 [.LCPI28_0]
572; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
573; CSKY-NEXT:    addi16 sp, sp, 4
574; CSKY-NEXT:    rts16
575; CSKY-NEXT:    .p2align 1
576; CSKY-NEXT:  # %bb.1:
577; CSKY-NEXT:    .p2align 2
578; CSKY-NEXT:  .LCPI28_0:
579; CSKY-NEXT:    .long __atomic_fetch_or_1
580;
581  %1 = atomicrmw or i8* %a, i8 %b acq_rel
582  ret i8 %1
583}
584
585define i8 @atomicrmw_or_i8_seq_cst(i8 *%a, i8 %b) nounwind {
586; CSKY-LABEL: atomicrmw_or_i8_seq_cst:
587; CSKY:       # %bb.0:
588; CSKY-NEXT:    subi16 sp, sp, 4
589; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
590; CSKY-NEXT:    movi16 a2, 5
591; CSKY-NEXT:    jsri32 [.LCPI29_0]
592; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
593; CSKY-NEXT:    addi16 sp, sp, 4
594; CSKY-NEXT:    rts16
595; CSKY-NEXT:    .p2align 1
596; CSKY-NEXT:  # %bb.1:
597; CSKY-NEXT:    .p2align 2
598; CSKY-NEXT:  .LCPI29_0:
599; CSKY-NEXT:    .long __atomic_fetch_or_1
600;
601  %1 = atomicrmw or i8* %a, i8 %b seq_cst
602  ret i8 %1
603}
604
605define i8 @atomicrmw_xor_i8_monotonic(i8 *%a, i8 %b) nounwind {
606; CSKY-LABEL: atomicrmw_xor_i8_monotonic:
607; CSKY:       # %bb.0:
608; CSKY-NEXT:    subi16 sp, sp, 4
609; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
610; CSKY-NEXT:    movi16 a2, 0
611; CSKY-NEXT:    jsri32 [.LCPI30_0]
612; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
613; CSKY-NEXT:    addi16 sp, sp, 4
614; CSKY-NEXT:    rts16
615; CSKY-NEXT:    .p2align 1
616; CSKY-NEXT:  # %bb.1:
617; CSKY-NEXT:    .p2align 2
618; CSKY-NEXT:  .LCPI30_0:
619; CSKY-NEXT:    .long __atomic_fetch_xor_1
620;
621  %1 = atomicrmw xor i8* %a, i8 %b monotonic
622  ret i8 %1
623}
624
625define i8 @atomicrmw_xor_i8_acquire(i8 *%a, i8 %b) nounwind {
626; CSKY-LABEL: atomicrmw_xor_i8_acquire:
627; CSKY:       # %bb.0:
628; CSKY-NEXT:    subi16 sp, sp, 4
629; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
630; CSKY-NEXT:    movi16 a2, 2
631; CSKY-NEXT:    jsri32 [.LCPI31_0]
632; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
633; CSKY-NEXT:    addi16 sp, sp, 4
634; CSKY-NEXT:    rts16
635; CSKY-NEXT:    .p2align 1
636; CSKY-NEXT:  # %bb.1:
637; CSKY-NEXT:    .p2align 2
638; CSKY-NEXT:  .LCPI31_0:
639; CSKY-NEXT:    .long __atomic_fetch_xor_1
640;
641  %1 = atomicrmw xor i8* %a, i8 %b acquire
642  ret i8 %1
643}
644
645define i8 @atomicrmw_xor_i8_release(i8 *%a, i8 %b) nounwind {
646; CSKY-LABEL: atomicrmw_xor_i8_release:
647; CSKY:       # %bb.0:
648; CSKY-NEXT:    subi16 sp, sp, 4
649; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
650; CSKY-NEXT:    movi16 a2, 3
651; CSKY-NEXT:    jsri32 [.LCPI32_0]
652; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
653; CSKY-NEXT:    addi16 sp, sp, 4
654; CSKY-NEXT:    rts16
655; CSKY-NEXT:    .p2align 1
656; CSKY-NEXT:  # %bb.1:
657; CSKY-NEXT:    .p2align 2
658; CSKY-NEXT:  .LCPI32_0:
659; CSKY-NEXT:    .long __atomic_fetch_xor_1
660;
661  %1 = atomicrmw xor i8* %a, i8 %b release
662  ret i8 %1
663}
664
665define i8 @atomicrmw_xor_i8_acq_rel(i8 *%a, i8 %b) nounwind {
666; CSKY-LABEL: atomicrmw_xor_i8_acq_rel:
667; CSKY:       # %bb.0:
668; CSKY-NEXT:    subi16 sp, sp, 4
669; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
670; CSKY-NEXT:    movi16 a2, 4
671; CSKY-NEXT:    jsri32 [.LCPI33_0]
672; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
673; CSKY-NEXT:    addi16 sp, sp, 4
674; CSKY-NEXT:    rts16
675; CSKY-NEXT:    .p2align 1
676; CSKY-NEXT:  # %bb.1:
677; CSKY-NEXT:    .p2align 2
678; CSKY-NEXT:  .LCPI33_0:
679; CSKY-NEXT:    .long __atomic_fetch_xor_1
680;
681  %1 = atomicrmw xor i8* %a, i8 %b acq_rel
682  ret i8 %1
683}
684
685define i8 @atomicrmw_xor_i8_seq_cst(i8 *%a, i8 %b) nounwind {
686; CSKY-LABEL: atomicrmw_xor_i8_seq_cst:
687; CSKY:       # %bb.0:
688; CSKY-NEXT:    subi16 sp, sp, 4
689; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
690; CSKY-NEXT:    movi16 a2, 5
691; CSKY-NEXT:    jsri32 [.LCPI34_0]
692; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
693; CSKY-NEXT:    addi16 sp, sp, 4
694; CSKY-NEXT:    rts16
695; CSKY-NEXT:    .p2align 1
696; CSKY-NEXT:  # %bb.1:
697; CSKY-NEXT:    .p2align 2
698; CSKY-NEXT:  .LCPI34_0:
699; CSKY-NEXT:    .long __atomic_fetch_xor_1
700;
701  %1 = atomicrmw xor i8* %a, i8 %b seq_cst
702  ret i8 %1
703}
704
705define i8 @atomicrmw_max_i8_monotonic(i8 *%a, i8 %b) nounwind {
706; CSKY-LABEL: atomicrmw_max_i8_monotonic:
707; CSKY:       # %bb.0:
708; CSKY-NEXT:    subi16 sp, sp, 20
709; CSKY-NEXT:    st16.w l3, (sp, 16)
710; CSKY-NEXT:    st16.w l2, (sp, 12)
711; CSKY-NEXT:    st16.w l1, (sp, 8)
712; CSKY-NEXT:    st16.w l0, (sp, 4)
713; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
714; CSKY-NEXT:    subi16 sp, sp, 8
715; CSKY-NEXT:    mov16 l0, a1
716; CSKY-NEXT:    mov16 l1, a0
717; CSKY-NEXT:    ld16.b a0, (a0, 0)
718; CSKY-NEXT:    sextb16 l2, a1
719; CSKY-NEXT:    movi16 l3, 0
720; CSKY-NEXT:  .LBB35_1: # %atomicrmw.start
721; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
722; CSKY-NEXT:    sextb16 a1, a0
723; CSKY-NEXT:    cmplt16 l2, a1
724; CSKY-NEXT:    mov16 a2, l0
725; CSKY-NEXT:    movt32 a2, a0
726; CSKY-NEXT:    st32.b a0, (sp, 7)
727; CSKY-NEXT:    st16.w l3, (sp, 0)
728; CSKY-NEXT:    mov16 a0, l1
729; CSKY-NEXT:    addi32 a1, sp, 7
730; CSKY-NEXT:    movi16 a3, 0
731; CSKY-NEXT:    jsri32 [.LCPI35_0]
732; CSKY-NEXT:    mov16 a1, a0
733; CSKY-NEXT:    ld32.b a0, (sp, 7)
734; CSKY-NEXT:    bez32 a1, .LBB35_1
735; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
736; CSKY-NEXT:    addi16 sp, sp, 8
737; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
738; CSKY-NEXT:    ld16.w l0, (sp, 4)
739; CSKY-NEXT:    ld16.w l1, (sp, 8)
740; CSKY-NEXT:    ld16.w l2, (sp, 12)
741; CSKY-NEXT:    ld16.w l3, (sp, 16)
742; CSKY-NEXT:    addi16 sp, sp, 20
743; CSKY-NEXT:    rts16
744; CSKY-NEXT:    .p2align 1
745; CSKY-NEXT:  # %bb.3:
746; CSKY-NEXT:    .p2align 2
747; CSKY-NEXT:  .LCPI35_0:
748; CSKY-NEXT:    .long __atomic_compare_exchange_1
749;
750  %1 = atomicrmw max i8* %a, i8 %b monotonic
751  ret i8 %1
752}
753
754define i8 @atomicrmw_max_i8_acquire(i8 *%a, i8 %b) nounwind {
755; CSKY-LABEL: atomicrmw_max_i8_acquire:
756; CSKY:       # %bb.0:
757; CSKY-NEXT:    subi16 sp, sp, 20
758; CSKY-NEXT:    st16.w l3, (sp, 16)
759; CSKY-NEXT:    st16.w l2, (sp, 12)
760; CSKY-NEXT:    st16.w l1, (sp, 8)
761; CSKY-NEXT:    st16.w l0, (sp, 4)
762; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
763; CSKY-NEXT:    subi16 sp, sp, 8
764; CSKY-NEXT:    mov16 l0, a1
765; CSKY-NEXT:    mov16 l1, a0
766; CSKY-NEXT:    ld16.b a0, (a0, 0)
767; CSKY-NEXT:    sextb16 l2, a1
768; CSKY-NEXT:    movi16 l3, 2
769; CSKY-NEXT:  .LBB36_1: # %atomicrmw.start
770; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
771; CSKY-NEXT:    sextb16 a1, a0
772; CSKY-NEXT:    cmplt16 l2, a1
773; CSKY-NEXT:    mov16 a2, l0
774; CSKY-NEXT:    movt32 a2, a0
775; CSKY-NEXT:    st32.b a0, (sp, 7)
776; CSKY-NEXT:    st16.w l3, (sp, 0)
777; CSKY-NEXT:    mov16 a0, l1
778; CSKY-NEXT:    addi32 a1, sp, 7
779; CSKY-NEXT:    movi16 a3, 2
780; CSKY-NEXT:    jsri32 [.LCPI36_0]
781; CSKY-NEXT:    mov16 a1, a0
782; CSKY-NEXT:    ld32.b a0, (sp, 7)
783; CSKY-NEXT:    bez32 a1, .LBB36_1
784; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
785; CSKY-NEXT:    addi16 sp, sp, 8
786; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
787; CSKY-NEXT:    ld16.w l0, (sp, 4)
788; CSKY-NEXT:    ld16.w l1, (sp, 8)
789; CSKY-NEXT:    ld16.w l2, (sp, 12)
790; CSKY-NEXT:    ld16.w l3, (sp, 16)
791; CSKY-NEXT:    addi16 sp, sp, 20
792; CSKY-NEXT:    rts16
793; CSKY-NEXT:    .p2align 1
794; CSKY-NEXT:  # %bb.3:
795; CSKY-NEXT:    .p2align 2
796; CSKY-NEXT:  .LCPI36_0:
797; CSKY-NEXT:    .long __atomic_compare_exchange_1
798;
799  %1 = atomicrmw max i8* %a, i8 %b acquire
800  ret i8 %1
801}
802
803define i8 @atomicrmw_max_i8_release(i8 *%a, i8 %b) nounwind {
804; CSKY-LABEL: atomicrmw_max_i8_release:
805; CSKY:       # %bb.0:
806; CSKY-NEXT:    subi16 sp, sp, 20
807; CSKY-NEXT:    st16.w l3, (sp, 16)
808; CSKY-NEXT:    st16.w l2, (sp, 12)
809; CSKY-NEXT:    st16.w l1, (sp, 8)
810; CSKY-NEXT:    st16.w l0, (sp, 4)
811; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
812; CSKY-NEXT:    subi16 sp, sp, 8
813; CSKY-NEXT:    mov16 l0, a1
814; CSKY-NEXT:    mov16 l1, a0
815; CSKY-NEXT:    ld16.b a0, (a0, 0)
816; CSKY-NEXT:    sextb16 l2, a1
817; CSKY-NEXT:    movi16 l3, 0
818; CSKY-NEXT:  .LBB37_1: # %atomicrmw.start
819; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
820; CSKY-NEXT:    sextb16 a1, a0
821; CSKY-NEXT:    cmplt16 l2, a1
822; CSKY-NEXT:    mov16 a2, l0
823; CSKY-NEXT:    movt32 a2, a0
824; CSKY-NEXT:    st32.b a0, (sp, 7)
825; CSKY-NEXT:    st16.w l3, (sp, 0)
826; CSKY-NEXT:    mov16 a0, l1
827; CSKY-NEXT:    addi32 a1, sp, 7
828; CSKY-NEXT:    movi16 a3, 3
829; CSKY-NEXT:    jsri32 [.LCPI37_0]
830; CSKY-NEXT:    mov16 a1, a0
831; CSKY-NEXT:    ld32.b a0, (sp, 7)
832; CSKY-NEXT:    bez32 a1, .LBB37_1
833; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
834; CSKY-NEXT:    addi16 sp, sp, 8
835; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
836; CSKY-NEXT:    ld16.w l0, (sp, 4)
837; CSKY-NEXT:    ld16.w l1, (sp, 8)
838; CSKY-NEXT:    ld16.w l2, (sp, 12)
839; CSKY-NEXT:    ld16.w l3, (sp, 16)
840; CSKY-NEXT:    addi16 sp, sp, 20
841; CSKY-NEXT:    rts16
842; CSKY-NEXT:    .p2align 1
843; CSKY-NEXT:  # %bb.3:
844; CSKY-NEXT:    .p2align 2
845; CSKY-NEXT:  .LCPI37_0:
846; CSKY-NEXT:    .long __atomic_compare_exchange_1
847;
848  %1 = atomicrmw max i8* %a, i8 %b release
849  ret i8 %1
850}
851
852define i8 @atomicrmw_max_i8_acq_rel(i8 *%a, i8 %b) nounwind {
853; CSKY-LABEL: atomicrmw_max_i8_acq_rel:
854; CSKY:       # %bb.0:
855; CSKY-NEXT:    subi16 sp, sp, 20
856; CSKY-NEXT:    st16.w l3, (sp, 16)
857; CSKY-NEXT:    st16.w l2, (sp, 12)
858; CSKY-NEXT:    st16.w l1, (sp, 8)
859; CSKY-NEXT:    st16.w l0, (sp, 4)
860; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
861; CSKY-NEXT:    subi16 sp, sp, 8
862; CSKY-NEXT:    mov16 l0, a1
863; CSKY-NEXT:    mov16 l1, a0
864; CSKY-NEXT:    ld16.b a0, (a0, 0)
865; CSKY-NEXT:    sextb16 l2, a1
866; CSKY-NEXT:    movi16 l3, 2
867; CSKY-NEXT:  .LBB38_1: # %atomicrmw.start
868; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
869; CSKY-NEXT:    sextb16 a1, a0
870; CSKY-NEXT:    cmplt16 l2, a1
871; CSKY-NEXT:    mov16 a2, l0
872; CSKY-NEXT:    movt32 a2, a0
873; CSKY-NEXT:    st32.b a0, (sp, 7)
874; CSKY-NEXT:    st16.w l3, (sp, 0)
875; CSKY-NEXT:    mov16 a0, l1
876; CSKY-NEXT:    addi32 a1, sp, 7
877; CSKY-NEXT:    movi16 a3, 4
878; CSKY-NEXT:    jsri32 [.LCPI38_0]
879; CSKY-NEXT:    mov16 a1, a0
880; CSKY-NEXT:    ld32.b a0, (sp, 7)
881; CSKY-NEXT:    bez32 a1, .LBB38_1
882; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
883; CSKY-NEXT:    addi16 sp, sp, 8
884; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
885; CSKY-NEXT:    ld16.w l0, (sp, 4)
886; CSKY-NEXT:    ld16.w l1, (sp, 8)
887; CSKY-NEXT:    ld16.w l2, (sp, 12)
888; CSKY-NEXT:    ld16.w l3, (sp, 16)
889; CSKY-NEXT:    addi16 sp, sp, 20
890; CSKY-NEXT:    rts16
891; CSKY-NEXT:    .p2align 1
892; CSKY-NEXT:  # %bb.3:
893; CSKY-NEXT:    .p2align 2
894; CSKY-NEXT:  .LCPI38_0:
895; CSKY-NEXT:    .long __atomic_compare_exchange_1
896;
897  %1 = atomicrmw max i8* %a, i8 %b acq_rel
898  ret i8 %1
899}
900
901define i8 @atomicrmw_max_i8_seq_cst(i8 *%a, i8 %b) nounwind {
902; CSKY-LABEL: atomicrmw_max_i8_seq_cst:
903; CSKY:       # %bb.0:
904; CSKY-NEXT:    subi16 sp, sp, 20
905; CSKY-NEXT:    st16.w l3, (sp, 16)
906; CSKY-NEXT:    st16.w l2, (sp, 12)
907; CSKY-NEXT:    st16.w l1, (sp, 8)
908; CSKY-NEXT:    st16.w l0, (sp, 4)
909; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
910; CSKY-NEXT:    subi16 sp, sp, 8
911; CSKY-NEXT:    mov16 l0, a1
912; CSKY-NEXT:    mov16 l1, a0
913; CSKY-NEXT:    ld16.b a0, (a0, 0)
914; CSKY-NEXT:    sextb16 l2, a1
915; CSKY-NEXT:    movi16 l3, 5
916; CSKY-NEXT:  .LBB39_1: # %atomicrmw.start
917; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
918; CSKY-NEXT:    sextb16 a1, a0
919; CSKY-NEXT:    cmplt16 l2, a1
920; CSKY-NEXT:    mov16 a2, l0
921; CSKY-NEXT:    movt32 a2, a0
922; CSKY-NEXT:    st32.b a0, (sp, 7)
923; CSKY-NEXT:    st16.w l3, (sp, 0)
924; CSKY-NEXT:    mov16 a0, l1
925; CSKY-NEXT:    addi32 a1, sp, 7
926; CSKY-NEXT:    movi16 a3, 5
927; CSKY-NEXT:    jsri32 [.LCPI39_0]
928; CSKY-NEXT:    mov16 a1, a0
929; CSKY-NEXT:    ld32.b a0, (sp, 7)
930; CSKY-NEXT:    bez32 a1, .LBB39_1
931; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
932; CSKY-NEXT:    addi16 sp, sp, 8
933; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
934; CSKY-NEXT:    ld16.w l0, (sp, 4)
935; CSKY-NEXT:    ld16.w l1, (sp, 8)
936; CSKY-NEXT:    ld16.w l2, (sp, 12)
937; CSKY-NEXT:    ld16.w l3, (sp, 16)
938; CSKY-NEXT:    addi16 sp, sp, 20
939; CSKY-NEXT:    rts16
940; CSKY-NEXT:    .p2align 1
941; CSKY-NEXT:  # %bb.3:
942; CSKY-NEXT:    .p2align 2
943; CSKY-NEXT:  .LCPI39_0:
944; CSKY-NEXT:    .long __atomic_compare_exchange_1
945;
946  %1 = atomicrmw max i8* %a, i8 %b seq_cst
947  ret i8 %1
948}
949
950define i8 @atomicrmw_min_i8_monotonic(i8 *%a, i8 %b) nounwind {
951; CSKY-LABEL: atomicrmw_min_i8_monotonic:
952; CSKY:       # %bb.0:
953; CSKY-NEXT:    subi16 sp, sp, 20
954; CSKY-NEXT:    st16.w l3, (sp, 16)
955; CSKY-NEXT:    st16.w l2, (sp, 12)
956; CSKY-NEXT:    st16.w l1, (sp, 8)
957; CSKY-NEXT:    st16.w l0, (sp, 4)
958; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
959; CSKY-NEXT:    subi16 sp, sp, 8
960; CSKY-NEXT:    mov16 l0, a1
961; CSKY-NEXT:    mov16 l1, a0
962; CSKY-NEXT:    ld16.b a0, (a0, 0)
963; CSKY-NEXT:    sextb16 l2, a1
964; CSKY-NEXT:    movi16 l3, 0
965; CSKY-NEXT:  .LBB40_1: # %atomicrmw.start
966; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
967; CSKY-NEXT:    sextb16 a1, a0
968; CSKY-NEXT:    cmplt16 l2, a1
969; CSKY-NEXT:    mov16 a2, l0
970; CSKY-NEXT:    movf32 a2, a0
971; CSKY-NEXT:    st32.b a0, (sp, 7)
972; CSKY-NEXT:    st16.w l3, (sp, 0)
973; CSKY-NEXT:    mov16 a0, l1
974; CSKY-NEXT:    addi32 a1, sp, 7
975; CSKY-NEXT:    movi16 a3, 0
976; CSKY-NEXT:    jsri32 [.LCPI40_0]
977; CSKY-NEXT:    mov16 a1, a0
978; CSKY-NEXT:    ld32.b a0, (sp, 7)
979; CSKY-NEXT:    bez32 a1, .LBB40_1
980; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
981; CSKY-NEXT:    addi16 sp, sp, 8
982; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
983; CSKY-NEXT:    ld16.w l0, (sp, 4)
984; CSKY-NEXT:    ld16.w l1, (sp, 8)
985; CSKY-NEXT:    ld16.w l2, (sp, 12)
986; CSKY-NEXT:    ld16.w l3, (sp, 16)
987; CSKY-NEXT:    addi16 sp, sp, 20
988; CSKY-NEXT:    rts16
989; CSKY-NEXT:    .p2align 1
990; CSKY-NEXT:  # %bb.3:
991; CSKY-NEXT:    .p2align 2
992; CSKY-NEXT:  .LCPI40_0:
993; CSKY-NEXT:    .long __atomic_compare_exchange_1
994;
995  %1 = atomicrmw min i8* %a, i8 %b monotonic
996  ret i8 %1
997}
998
999define i8 @atomicrmw_min_i8_acquire(i8 *%a, i8 %b) nounwind {
1000; CSKY-LABEL: atomicrmw_min_i8_acquire:
1001; CSKY:       # %bb.0:
1002; CSKY-NEXT:    subi16 sp, sp, 20
1003; CSKY-NEXT:    st16.w l3, (sp, 16)
1004; CSKY-NEXT:    st16.w l2, (sp, 12)
1005; CSKY-NEXT:    st16.w l1, (sp, 8)
1006; CSKY-NEXT:    st16.w l0, (sp, 4)
1007; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1008; CSKY-NEXT:    subi16 sp, sp, 8
1009; CSKY-NEXT:    mov16 l0, a1
1010; CSKY-NEXT:    mov16 l1, a0
1011; CSKY-NEXT:    ld16.b a0, (a0, 0)
1012; CSKY-NEXT:    sextb16 l2, a1
1013; CSKY-NEXT:    movi16 l3, 2
1014; CSKY-NEXT:  .LBB41_1: # %atomicrmw.start
1015; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1016; CSKY-NEXT:    sextb16 a1, a0
1017; CSKY-NEXT:    cmplt16 l2, a1
1018; CSKY-NEXT:    mov16 a2, l0
1019; CSKY-NEXT:    movf32 a2, a0
1020; CSKY-NEXT:    st32.b a0, (sp, 7)
1021; CSKY-NEXT:    st16.w l3, (sp, 0)
1022; CSKY-NEXT:    mov16 a0, l1
1023; CSKY-NEXT:    addi32 a1, sp, 7
1024; CSKY-NEXT:    movi16 a3, 2
1025; CSKY-NEXT:    jsri32 [.LCPI41_0]
1026; CSKY-NEXT:    mov16 a1, a0
1027; CSKY-NEXT:    ld32.b a0, (sp, 7)
1028; CSKY-NEXT:    bez32 a1, .LBB41_1
1029; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1030; CSKY-NEXT:    addi16 sp, sp, 8
1031; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1032; CSKY-NEXT:    ld16.w l0, (sp, 4)
1033; CSKY-NEXT:    ld16.w l1, (sp, 8)
1034; CSKY-NEXT:    ld16.w l2, (sp, 12)
1035; CSKY-NEXT:    ld16.w l3, (sp, 16)
1036; CSKY-NEXT:    addi16 sp, sp, 20
1037; CSKY-NEXT:    rts16
1038; CSKY-NEXT:    .p2align 1
1039; CSKY-NEXT:  # %bb.3:
1040; CSKY-NEXT:    .p2align 2
1041; CSKY-NEXT:  .LCPI41_0:
1042; CSKY-NEXT:    .long __atomic_compare_exchange_1
1043;
1044  %1 = atomicrmw min i8* %a, i8 %b acquire
1045  ret i8 %1
1046}
1047
1048define i8 @atomicrmw_min_i8_release(i8 *%a, i8 %b) nounwind {
1049; CSKY-LABEL: atomicrmw_min_i8_release:
1050; CSKY:       # %bb.0:
1051; CSKY-NEXT:    subi16 sp, sp, 20
1052; CSKY-NEXT:    st16.w l3, (sp, 16)
1053; CSKY-NEXT:    st16.w l2, (sp, 12)
1054; CSKY-NEXT:    st16.w l1, (sp, 8)
1055; CSKY-NEXT:    st16.w l0, (sp, 4)
1056; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1057; CSKY-NEXT:    subi16 sp, sp, 8
1058; CSKY-NEXT:    mov16 l0, a1
1059; CSKY-NEXT:    mov16 l1, a0
1060; CSKY-NEXT:    ld16.b a0, (a0, 0)
1061; CSKY-NEXT:    sextb16 l2, a1
1062; CSKY-NEXT:    movi16 l3, 0
1063; CSKY-NEXT:  .LBB42_1: # %atomicrmw.start
1064; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1065; CSKY-NEXT:    sextb16 a1, a0
1066; CSKY-NEXT:    cmplt16 l2, a1
1067; CSKY-NEXT:    mov16 a2, l0
1068; CSKY-NEXT:    movf32 a2, a0
1069; CSKY-NEXT:    st32.b a0, (sp, 7)
1070; CSKY-NEXT:    st16.w l3, (sp, 0)
1071; CSKY-NEXT:    mov16 a0, l1
1072; CSKY-NEXT:    addi32 a1, sp, 7
1073; CSKY-NEXT:    movi16 a3, 3
1074; CSKY-NEXT:    jsri32 [.LCPI42_0]
1075; CSKY-NEXT:    mov16 a1, a0
1076; CSKY-NEXT:    ld32.b a0, (sp, 7)
1077; CSKY-NEXT:    bez32 a1, .LBB42_1
1078; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1079; CSKY-NEXT:    addi16 sp, sp, 8
1080; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1081; CSKY-NEXT:    ld16.w l0, (sp, 4)
1082; CSKY-NEXT:    ld16.w l1, (sp, 8)
1083; CSKY-NEXT:    ld16.w l2, (sp, 12)
1084; CSKY-NEXT:    ld16.w l3, (sp, 16)
1085; CSKY-NEXT:    addi16 sp, sp, 20
1086; CSKY-NEXT:    rts16
1087; CSKY-NEXT:    .p2align 1
1088; CSKY-NEXT:  # %bb.3:
1089; CSKY-NEXT:    .p2align 2
1090; CSKY-NEXT:  .LCPI42_0:
1091; CSKY-NEXT:    .long __atomic_compare_exchange_1
1092;
1093  %1 = atomicrmw min i8* %a, i8 %b release
1094  ret i8 %1
1095}
1096
1097define i8 @atomicrmw_min_i8_acq_rel(i8 *%a, i8 %b) nounwind {
1098; CSKY-LABEL: atomicrmw_min_i8_acq_rel:
1099; CSKY:       # %bb.0:
1100; CSKY-NEXT:    subi16 sp, sp, 20
1101; CSKY-NEXT:    st16.w l3, (sp, 16)
1102; CSKY-NEXT:    st16.w l2, (sp, 12)
1103; CSKY-NEXT:    st16.w l1, (sp, 8)
1104; CSKY-NEXT:    st16.w l0, (sp, 4)
1105; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1106; CSKY-NEXT:    subi16 sp, sp, 8
1107; CSKY-NEXT:    mov16 l0, a1
1108; CSKY-NEXT:    mov16 l1, a0
1109; CSKY-NEXT:    ld16.b a0, (a0, 0)
1110; CSKY-NEXT:    sextb16 l2, a1
1111; CSKY-NEXT:    movi16 l3, 2
1112; CSKY-NEXT:  .LBB43_1: # %atomicrmw.start
1113; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1114; CSKY-NEXT:    sextb16 a1, a0
1115; CSKY-NEXT:    cmplt16 l2, a1
1116; CSKY-NEXT:    mov16 a2, l0
1117; CSKY-NEXT:    movf32 a2, a0
1118; CSKY-NEXT:    st32.b a0, (sp, 7)
1119; CSKY-NEXT:    st16.w l3, (sp, 0)
1120; CSKY-NEXT:    mov16 a0, l1
1121; CSKY-NEXT:    addi32 a1, sp, 7
1122; CSKY-NEXT:    movi16 a3, 4
1123; CSKY-NEXT:    jsri32 [.LCPI43_0]
1124; CSKY-NEXT:    mov16 a1, a0
1125; CSKY-NEXT:    ld32.b a0, (sp, 7)
1126; CSKY-NEXT:    bez32 a1, .LBB43_1
1127; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1128; CSKY-NEXT:    addi16 sp, sp, 8
1129; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1130; CSKY-NEXT:    ld16.w l0, (sp, 4)
1131; CSKY-NEXT:    ld16.w l1, (sp, 8)
1132; CSKY-NEXT:    ld16.w l2, (sp, 12)
1133; CSKY-NEXT:    ld16.w l3, (sp, 16)
1134; CSKY-NEXT:    addi16 sp, sp, 20
1135; CSKY-NEXT:    rts16
1136; CSKY-NEXT:    .p2align 1
1137; CSKY-NEXT:  # %bb.3:
1138; CSKY-NEXT:    .p2align 2
1139; CSKY-NEXT:  .LCPI43_0:
1140; CSKY-NEXT:    .long __atomic_compare_exchange_1
1141;
1142  %1 = atomicrmw min i8* %a, i8 %b acq_rel
1143  ret i8 %1
1144}
1145
1146define i8 @atomicrmw_min_i8_seq_cst(i8 *%a, i8 %b) nounwind {
1147; CSKY-LABEL: atomicrmw_min_i8_seq_cst:
1148; CSKY:       # %bb.0:
1149; CSKY-NEXT:    subi16 sp, sp, 20
1150; CSKY-NEXT:    st16.w l3, (sp, 16)
1151; CSKY-NEXT:    st16.w l2, (sp, 12)
1152; CSKY-NEXT:    st16.w l1, (sp, 8)
1153; CSKY-NEXT:    st16.w l0, (sp, 4)
1154; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1155; CSKY-NEXT:    subi16 sp, sp, 8
1156; CSKY-NEXT:    mov16 l0, a1
1157; CSKY-NEXT:    mov16 l1, a0
1158; CSKY-NEXT:    ld16.b a0, (a0, 0)
1159; CSKY-NEXT:    sextb16 l2, a1
1160; CSKY-NEXT:    movi16 l3, 5
1161; CSKY-NEXT:  .LBB44_1: # %atomicrmw.start
1162; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1163; CSKY-NEXT:    sextb16 a1, a0
1164; CSKY-NEXT:    cmplt16 l2, a1
1165; CSKY-NEXT:    mov16 a2, l0
1166; CSKY-NEXT:    movf32 a2, a0
1167; CSKY-NEXT:    st32.b a0, (sp, 7)
1168; CSKY-NEXT:    st16.w l3, (sp, 0)
1169; CSKY-NEXT:    mov16 a0, l1
1170; CSKY-NEXT:    addi32 a1, sp, 7
1171; CSKY-NEXT:    movi16 a3, 5
1172; CSKY-NEXT:    jsri32 [.LCPI44_0]
1173; CSKY-NEXT:    mov16 a1, a0
1174; CSKY-NEXT:    ld32.b a0, (sp, 7)
1175; CSKY-NEXT:    bez32 a1, .LBB44_1
1176; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1177; CSKY-NEXT:    addi16 sp, sp, 8
1178; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1179; CSKY-NEXT:    ld16.w l0, (sp, 4)
1180; CSKY-NEXT:    ld16.w l1, (sp, 8)
1181; CSKY-NEXT:    ld16.w l2, (sp, 12)
1182; CSKY-NEXT:    ld16.w l3, (sp, 16)
1183; CSKY-NEXT:    addi16 sp, sp, 20
1184; CSKY-NEXT:    rts16
1185; CSKY-NEXT:    .p2align 1
1186; CSKY-NEXT:  # %bb.3:
1187; CSKY-NEXT:    .p2align 2
1188; CSKY-NEXT:  .LCPI44_0:
1189; CSKY-NEXT:    .long __atomic_compare_exchange_1
1190;
1191  %1 = atomicrmw min i8* %a, i8 %b seq_cst
1192  ret i8 %1
1193}
1194
1195define i8 @atomicrmw_umax_i8_monotonic(i8 *%a, i8 %b) nounwind {
1196; CSKY-LABEL: atomicrmw_umax_i8_monotonic:
1197; CSKY:       # %bb.0:
1198; CSKY-NEXT:    subi16 sp, sp, 20
1199; CSKY-NEXT:    st16.w l3, (sp, 16)
1200; CSKY-NEXT:    st16.w l2, (sp, 12)
1201; CSKY-NEXT:    st16.w l1, (sp, 8)
1202; CSKY-NEXT:    st16.w l0, (sp, 4)
1203; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1204; CSKY-NEXT:    subi16 sp, sp, 8
1205; CSKY-NEXT:    mov16 l0, a1
1206; CSKY-NEXT:    mov16 l1, a0
1207; CSKY-NEXT:    ld16.b a0, (a0, 0)
1208; CSKY-NEXT:    zextb16 l2, a1
1209; CSKY-NEXT:    movi16 l3, 0
1210; CSKY-NEXT:  .LBB45_1: # %atomicrmw.start
1211; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1212; CSKY-NEXT:    zextb16 a1, a0
1213; CSKY-NEXT:    cmphs16 l2, a1
1214; CSKY-NEXT:    mov16 a2, l0
1215; CSKY-NEXT:    movf32 a2, a0
1216; CSKY-NEXT:    st32.b a0, (sp, 7)
1217; CSKY-NEXT:    st16.w l3, (sp, 0)
1218; CSKY-NEXT:    mov16 a0, l1
1219; CSKY-NEXT:    addi32 a1, sp, 7
1220; CSKY-NEXT:    movi16 a3, 0
1221; CSKY-NEXT:    jsri32 [.LCPI45_0]
1222; CSKY-NEXT:    mov16 a1, a0
1223; CSKY-NEXT:    ld32.b a0, (sp, 7)
1224; CSKY-NEXT:    bez32 a1, .LBB45_1
1225; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1226; CSKY-NEXT:    addi16 sp, sp, 8
1227; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1228; CSKY-NEXT:    ld16.w l0, (sp, 4)
1229; CSKY-NEXT:    ld16.w l1, (sp, 8)
1230; CSKY-NEXT:    ld16.w l2, (sp, 12)
1231; CSKY-NEXT:    ld16.w l3, (sp, 16)
1232; CSKY-NEXT:    addi16 sp, sp, 20
1233; CSKY-NEXT:    rts16
1234; CSKY-NEXT:    .p2align 1
1235; CSKY-NEXT:  # %bb.3:
1236; CSKY-NEXT:    .p2align 2
1237; CSKY-NEXT:  .LCPI45_0:
1238; CSKY-NEXT:    .long __atomic_compare_exchange_1
1239;
1240  %1 = atomicrmw umax i8* %a, i8 %b monotonic
1241  ret i8 %1
1242}
1243
1244define i8 @atomicrmw_umax_i8_acquire(i8 *%a, i8 %b) nounwind {
1245; CSKY-LABEL: atomicrmw_umax_i8_acquire:
1246; CSKY:       # %bb.0:
1247; CSKY-NEXT:    subi16 sp, sp, 20
1248; CSKY-NEXT:    st16.w l3, (sp, 16)
1249; CSKY-NEXT:    st16.w l2, (sp, 12)
1250; CSKY-NEXT:    st16.w l1, (sp, 8)
1251; CSKY-NEXT:    st16.w l0, (sp, 4)
1252; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1253; CSKY-NEXT:    subi16 sp, sp, 8
1254; CSKY-NEXT:    mov16 l0, a1
1255; CSKY-NEXT:    mov16 l1, a0
1256; CSKY-NEXT:    ld16.b a0, (a0, 0)
1257; CSKY-NEXT:    zextb16 l2, a1
1258; CSKY-NEXT:    movi16 l3, 2
1259; CSKY-NEXT:  .LBB46_1: # %atomicrmw.start
1260; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1261; CSKY-NEXT:    zextb16 a1, a0
1262; CSKY-NEXT:    cmphs16 l2, a1
1263; CSKY-NEXT:    mov16 a2, l0
1264; CSKY-NEXT:    movf32 a2, a0
1265; CSKY-NEXT:    st32.b a0, (sp, 7)
1266; CSKY-NEXT:    st16.w l3, (sp, 0)
1267; CSKY-NEXT:    mov16 a0, l1
1268; CSKY-NEXT:    addi32 a1, sp, 7
1269; CSKY-NEXT:    movi16 a3, 2
1270; CSKY-NEXT:    jsri32 [.LCPI46_0]
1271; CSKY-NEXT:    mov16 a1, a0
1272; CSKY-NEXT:    ld32.b a0, (sp, 7)
1273; CSKY-NEXT:    bez32 a1, .LBB46_1
1274; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1275; CSKY-NEXT:    addi16 sp, sp, 8
1276; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1277; CSKY-NEXT:    ld16.w l0, (sp, 4)
1278; CSKY-NEXT:    ld16.w l1, (sp, 8)
1279; CSKY-NEXT:    ld16.w l2, (sp, 12)
1280; CSKY-NEXT:    ld16.w l3, (sp, 16)
1281; CSKY-NEXT:    addi16 sp, sp, 20
1282; CSKY-NEXT:    rts16
1283; CSKY-NEXT:    .p2align 1
1284; CSKY-NEXT:  # %bb.3:
1285; CSKY-NEXT:    .p2align 2
1286; CSKY-NEXT:  .LCPI46_0:
1287; CSKY-NEXT:    .long __atomic_compare_exchange_1
1288;
1289  %1 = atomicrmw umax i8* %a, i8 %b acquire
1290  ret i8 %1
1291}
1292
1293define i8 @atomicrmw_umax_i8_release(i8 *%a, i8 %b) nounwind {
1294; CSKY-LABEL: atomicrmw_umax_i8_release:
1295; CSKY:       # %bb.0:
1296; CSKY-NEXT:    subi16 sp, sp, 20
1297; CSKY-NEXT:    st16.w l3, (sp, 16)
1298; CSKY-NEXT:    st16.w l2, (sp, 12)
1299; CSKY-NEXT:    st16.w l1, (sp, 8)
1300; CSKY-NEXT:    st16.w l0, (sp, 4)
1301; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1302; CSKY-NEXT:    subi16 sp, sp, 8
1303; CSKY-NEXT:    mov16 l0, a1
1304; CSKY-NEXT:    mov16 l1, a0
1305; CSKY-NEXT:    ld16.b a0, (a0, 0)
1306; CSKY-NEXT:    zextb16 l2, a1
1307; CSKY-NEXT:    movi16 l3, 0
1308; CSKY-NEXT:  .LBB47_1: # %atomicrmw.start
1309; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1310; CSKY-NEXT:    zextb16 a1, a0
1311; CSKY-NEXT:    cmphs16 l2, a1
1312; CSKY-NEXT:    mov16 a2, l0
1313; CSKY-NEXT:    movf32 a2, a0
1314; CSKY-NEXT:    st32.b a0, (sp, 7)
1315; CSKY-NEXT:    st16.w l3, (sp, 0)
1316; CSKY-NEXT:    mov16 a0, l1
1317; CSKY-NEXT:    addi32 a1, sp, 7
1318; CSKY-NEXT:    movi16 a3, 3
1319; CSKY-NEXT:    jsri32 [.LCPI47_0]
1320; CSKY-NEXT:    mov16 a1, a0
1321; CSKY-NEXT:    ld32.b a0, (sp, 7)
1322; CSKY-NEXT:    bez32 a1, .LBB47_1
1323; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1324; CSKY-NEXT:    addi16 sp, sp, 8
1325; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1326; CSKY-NEXT:    ld16.w l0, (sp, 4)
1327; CSKY-NEXT:    ld16.w l1, (sp, 8)
1328; CSKY-NEXT:    ld16.w l2, (sp, 12)
1329; CSKY-NEXT:    ld16.w l3, (sp, 16)
1330; CSKY-NEXT:    addi16 sp, sp, 20
1331; CSKY-NEXT:    rts16
1332; CSKY-NEXT:    .p2align 1
1333; CSKY-NEXT:  # %bb.3:
1334; CSKY-NEXT:    .p2align 2
1335; CSKY-NEXT:  .LCPI47_0:
1336; CSKY-NEXT:    .long __atomic_compare_exchange_1
1337;
1338  %1 = atomicrmw umax i8* %a, i8 %b release
1339  ret i8 %1
1340}
1341
1342define i8 @atomicrmw_umax_i8_acq_rel(i8 *%a, i8 %b) nounwind {
1343; CSKY-LABEL: atomicrmw_umax_i8_acq_rel:
1344; CSKY:       # %bb.0:
1345; CSKY-NEXT:    subi16 sp, sp, 20
1346; CSKY-NEXT:    st16.w l3, (sp, 16)
1347; CSKY-NEXT:    st16.w l2, (sp, 12)
1348; CSKY-NEXT:    st16.w l1, (sp, 8)
1349; CSKY-NEXT:    st16.w l0, (sp, 4)
1350; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1351; CSKY-NEXT:    subi16 sp, sp, 8
1352; CSKY-NEXT:    mov16 l0, a1
1353; CSKY-NEXT:    mov16 l1, a0
1354; CSKY-NEXT:    ld16.b a0, (a0, 0)
1355; CSKY-NEXT:    zextb16 l2, a1
1356; CSKY-NEXT:    movi16 l3, 2
1357; CSKY-NEXT:  .LBB48_1: # %atomicrmw.start
1358; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1359; CSKY-NEXT:    zextb16 a1, a0
1360; CSKY-NEXT:    cmphs16 l2, a1
1361; CSKY-NEXT:    mov16 a2, l0
1362; CSKY-NEXT:    movf32 a2, a0
1363; CSKY-NEXT:    st32.b a0, (sp, 7)
1364; CSKY-NEXT:    st16.w l3, (sp, 0)
1365; CSKY-NEXT:    mov16 a0, l1
1366; CSKY-NEXT:    addi32 a1, sp, 7
1367; CSKY-NEXT:    movi16 a3, 4
1368; CSKY-NEXT:    jsri32 [.LCPI48_0]
1369; CSKY-NEXT:    mov16 a1, a0
1370; CSKY-NEXT:    ld32.b a0, (sp, 7)
1371; CSKY-NEXT:    bez32 a1, .LBB48_1
1372; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1373; CSKY-NEXT:    addi16 sp, sp, 8
1374; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1375; CSKY-NEXT:    ld16.w l0, (sp, 4)
1376; CSKY-NEXT:    ld16.w l1, (sp, 8)
1377; CSKY-NEXT:    ld16.w l2, (sp, 12)
1378; CSKY-NEXT:    ld16.w l3, (sp, 16)
1379; CSKY-NEXT:    addi16 sp, sp, 20
1380; CSKY-NEXT:    rts16
1381; CSKY-NEXT:    .p2align 1
1382; CSKY-NEXT:  # %bb.3:
1383; CSKY-NEXT:    .p2align 2
1384; CSKY-NEXT:  .LCPI48_0:
1385; CSKY-NEXT:    .long __atomic_compare_exchange_1
1386;
1387  %1 = atomicrmw umax i8* %a, i8 %b acq_rel
1388  ret i8 %1
1389}
1390
1391define i8 @atomicrmw_umax_i8_seq_cst(i8 *%a, i8 %b) nounwind {
1392; CSKY-LABEL: atomicrmw_umax_i8_seq_cst:
1393; CSKY:       # %bb.0:
1394; CSKY-NEXT:    subi16 sp, sp, 20
1395; CSKY-NEXT:    st16.w l3, (sp, 16)
1396; CSKY-NEXT:    st16.w l2, (sp, 12)
1397; CSKY-NEXT:    st16.w l1, (sp, 8)
1398; CSKY-NEXT:    st16.w l0, (sp, 4)
1399; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1400; CSKY-NEXT:    subi16 sp, sp, 8
1401; CSKY-NEXT:    mov16 l0, a1
1402; CSKY-NEXT:    mov16 l1, a0
1403; CSKY-NEXT:    ld16.b a0, (a0, 0)
1404; CSKY-NEXT:    zextb16 l2, a1
1405; CSKY-NEXT:    movi16 l3, 5
1406; CSKY-NEXT:  .LBB49_1: # %atomicrmw.start
1407; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1408; CSKY-NEXT:    zextb16 a1, a0
1409; CSKY-NEXT:    cmphs16 l2, a1
1410; CSKY-NEXT:    mov16 a2, l0
1411; CSKY-NEXT:    movf32 a2, a0
1412; CSKY-NEXT:    st32.b a0, (sp, 7)
1413; CSKY-NEXT:    st16.w l3, (sp, 0)
1414; CSKY-NEXT:    mov16 a0, l1
1415; CSKY-NEXT:    addi32 a1, sp, 7
1416; CSKY-NEXT:    movi16 a3, 5
1417; CSKY-NEXT:    jsri32 [.LCPI49_0]
1418; CSKY-NEXT:    mov16 a1, a0
1419; CSKY-NEXT:    ld32.b a0, (sp, 7)
1420; CSKY-NEXT:    bez32 a1, .LBB49_1
1421; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1422; CSKY-NEXT:    addi16 sp, sp, 8
1423; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1424; CSKY-NEXT:    ld16.w l0, (sp, 4)
1425; CSKY-NEXT:    ld16.w l1, (sp, 8)
1426; CSKY-NEXT:    ld16.w l2, (sp, 12)
1427; CSKY-NEXT:    ld16.w l3, (sp, 16)
1428; CSKY-NEXT:    addi16 sp, sp, 20
1429; CSKY-NEXT:    rts16
1430; CSKY-NEXT:    .p2align 1
1431; CSKY-NEXT:  # %bb.3:
1432; CSKY-NEXT:    .p2align 2
1433; CSKY-NEXT:  .LCPI49_0:
1434; CSKY-NEXT:    .long __atomic_compare_exchange_1
1435;
1436  %1 = atomicrmw umax i8* %a, i8 %b seq_cst
1437  ret i8 %1
1438}
1439
1440define i8 @atomicrmw_umin_i8_monotonic(i8 *%a, i8 %b) nounwind {
1441; CSKY-LABEL: atomicrmw_umin_i8_monotonic:
1442; CSKY:       # %bb.0:
1443; CSKY-NEXT:    subi16 sp, sp, 20
1444; CSKY-NEXT:    st16.w l3, (sp, 16)
1445; CSKY-NEXT:    st16.w l2, (sp, 12)
1446; CSKY-NEXT:    st16.w l1, (sp, 8)
1447; CSKY-NEXT:    st16.w l0, (sp, 4)
1448; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1449; CSKY-NEXT:    subi16 sp, sp, 8
1450; CSKY-NEXT:    mov16 l0, a1
1451; CSKY-NEXT:    mov16 l1, a0
1452; CSKY-NEXT:    ld16.b a0, (a0, 0)
1453; CSKY-NEXT:    zextb16 l2, a1
1454; CSKY-NEXT:    movi16 l3, 0
1455; CSKY-NEXT:  .LBB50_1: # %atomicrmw.start
1456; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1457; CSKY-NEXT:    zextb16 a1, a0
1458; CSKY-NEXT:    cmphs16 l2, a1
1459; CSKY-NEXT:    mov16 a2, l0
1460; CSKY-NEXT:    movt32 a2, a0
1461; CSKY-NEXT:    st32.b a0, (sp, 7)
1462; CSKY-NEXT:    st16.w l3, (sp, 0)
1463; CSKY-NEXT:    mov16 a0, l1
1464; CSKY-NEXT:    addi32 a1, sp, 7
1465; CSKY-NEXT:    movi16 a3, 0
1466; CSKY-NEXT:    jsri32 [.LCPI50_0]
1467; CSKY-NEXT:    mov16 a1, a0
1468; CSKY-NEXT:    ld32.b a0, (sp, 7)
1469; CSKY-NEXT:    bez32 a1, .LBB50_1
1470; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1471; CSKY-NEXT:    addi16 sp, sp, 8
1472; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1473; CSKY-NEXT:    ld16.w l0, (sp, 4)
1474; CSKY-NEXT:    ld16.w l1, (sp, 8)
1475; CSKY-NEXT:    ld16.w l2, (sp, 12)
1476; CSKY-NEXT:    ld16.w l3, (sp, 16)
1477; CSKY-NEXT:    addi16 sp, sp, 20
1478; CSKY-NEXT:    rts16
1479; CSKY-NEXT:    .p2align 1
1480; CSKY-NEXT:  # %bb.3:
1481; CSKY-NEXT:    .p2align 2
1482; CSKY-NEXT:  .LCPI50_0:
1483; CSKY-NEXT:    .long __atomic_compare_exchange_1
1484;
1485  %1 = atomicrmw umin i8* %a, i8 %b monotonic
1486  ret i8 %1
1487}
1488
1489define i8 @atomicrmw_umin_i8_acquire(i8 *%a, i8 %b) nounwind {
1490; CSKY-LABEL: atomicrmw_umin_i8_acquire:
1491; CSKY:       # %bb.0:
1492; CSKY-NEXT:    subi16 sp, sp, 20
1493; CSKY-NEXT:    st16.w l3, (sp, 16)
1494; CSKY-NEXT:    st16.w l2, (sp, 12)
1495; CSKY-NEXT:    st16.w l1, (sp, 8)
1496; CSKY-NEXT:    st16.w l0, (sp, 4)
1497; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1498; CSKY-NEXT:    subi16 sp, sp, 8
1499; CSKY-NEXT:    mov16 l0, a1
1500; CSKY-NEXT:    mov16 l1, a0
1501; CSKY-NEXT:    ld16.b a0, (a0, 0)
1502; CSKY-NEXT:    zextb16 l2, a1
1503; CSKY-NEXT:    movi16 l3, 2
1504; CSKY-NEXT:  .LBB51_1: # %atomicrmw.start
1505; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1506; CSKY-NEXT:    zextb16 a1, a0
1507; CSKY-NEXT:    cmphs16 l2, a1
1508; CSKY-NEXT:    mov16 a2, l0
1509; CSKY-NEXT:    movt32 a2, a0
1510; CSKY-NEXT:    st32.b a0, (sp, 7)
1511; CSKY-NEXT:    st16.w l3, (sp, 0)
1512; CSKY-NEXT:    mov16 a0, l1
1513; CSKY-NEXT:    addi32 a1, sp, 7
1514; CSKY-NEXT:    movi16 a3, 2
1515; CSKY-NEXT:    jsri32 [.LCPI51_0]
1516; CSKY-NEXT:    mov16 a1, a0
1517; CSKY-NEXT:    ld32.b a0, (sp, 7)
1518; CSKY-NEXT:    bez32 a1, .LBB51_1
1519; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1520; CSKY-NEXT:    addi16 sp, sp, 8
1521; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1522; CSKY-NEXT:    ld16.w l0, (sp, 4)
1523; CSKY-NEXT:    ld16.w l1, (sp, 8)
1524; CSKY-NEXT:    ld16.w l2, (sp, 12)
1525; CSKY-NEXT:    ld16.w l3, (sp, 16)
1526; CSKY-NEXT:    addi16 sp, sp, 20
1527; CSKY-NEXT:    rts16
1528; CSKY-NEXT:    .p2align 1
1529; CSKY-NEXT:  # %bb.3:
1530; CSKY-NEXT:    .p2align 2
1531; CSKY-NEXT:  .LCPI51_0:
1532; CSKY-NEXT:    .long __atomic_compare_exchange_1
1533;
1534  %1 = atomicrmw umin i8* %a, i8 %b acquire
1535  ret i8 %1
1536}
1537
1538define i8 @atomicrmw_umin_i8_release(i8 *%a, i8 %b) nounwind {
1539; CSKY-LABEL: atomicrmw_umin_i8_release:
1540; CSKY:       # %bb.0:
1541; CSKY-NEXT:    subi16 sp, sp, 20
1542; CSKY-NEXT:    st16.w l3, (sp, 16)
1543; CSKY-NEXT:    st16.w l2, (sp, 12)
1544; CSKY-NEXT:    st16.w l1, (sp, 8)
1545; CSKY-NEXT:    st16.w l0, (sp, 4)
1546; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1547; CSKY-NEXT:    subi16 sp, sp, 8
1548; CSKY-NEXT:    mov16 l0, a1
1549; CSKY-NEXT:    mov16 l1, a0
1550; CSKY-NEXT:    ld16.b a0, (a0, 0)
1551; CSKY-NEXT:    zextb16 l2, a1
1552; CSKY-NEXT:    movi16 l3, 0
1553; CSKY-NEXT:  .LBB52_1: # %atomicrmw.start
1554; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1555; CSKY-NEXT:    zextb16 a1, a0
1556; CSKY-NEXT:    cmphs16 l2, a1
1557; CSKY-NEXT:    mov16 a2, l0
1558; CSKY-NEXT:    movt32 a2, a0
1559; CSKY-NEXT:    st32.b a0, (sp, 7)
1560; CSKY-NEXT:    st16.w l3, (sp, 0)
1561; CSKY-NEXT:    mov16 a0, l1
1562; CSKY-NEXT:    addi32 a1, sp, 7
1563; CSKY-NEXT:    movi16 a3, 3
1564; CSKY-NEXT:    jsri32 [.LCPI52_0]
1565; CSKY-NEXT:    mov16 a1, a0
1566; CSKY-NEXT:    ld32.b a0, (sp, 7)
1567; CSKY-NEXT:    bez32 a1, .LBB52_1
1568; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1569; CSKY-NEXT:    addi16 sp, sp, 8
1570; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1571; CSKY-NEXT:    ld16.w l0, (sp, 4)
1572; CSKY-NEXT:    ld16.w l1, (sp, 8)
1573; CSKY-NEXT:    ld16.w l2, (sp, 12)
1574; CSKY-NEXT:    ld16.w l3, (sp, 16)
1575; CSKY-NEXT:    addi16 sp, sp, 20
1576; CSKY-NEXT:    rts16
1577; CSKY-NEXT:    .p2align 1
1578; CSKY-NEXT:  # %bb.3:
1579; CSKY-NEXT:    .p2align 2
1580; CSKY-NEXT:  .LCPI52_0:
1581; CSKY-NEXT:    .long __atomic_compare_exchange_1
1582;
1583  %1 = atomicrmw umin i8* %a, i8 %b release
1584  ret i8 %1
1585}
1586
1587define i8 @atomicrmw_umin_i8_acq_rel(i8 *%a, i8 %b) nounwind {
1588; CSKY-LABEL: atomicrmw_umin_i8_acq_rel:
1589; CSKY:       # %bb.0:
1590; CSKY-NEXT:    subi16 sp, sp, 20
1591; CSKY-NEXT:    st16.w l3, (sp, 16)
1592; CSKY-NEXT:    st16.w l2, (sp, 12)
1593; CSKY-NEXT:    st16.w l1, (sp, 8)
1594; CSKY-NEXT:    st16.w l0, (sp, 4)
1595; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1596; CSKY-NEXT:    subi16 sp, sp, 8
1597; CSKY-NEXT:    mov16 l0, a1
1598; CSKY-NEXT:    mov16 l1, a0
1599; CSKY-NEXT:    ld16.b a0, (a0, 0)
1600; CSKY-NEXT:    zextb16 l2, a1
1601; CSKY-NEXT:    movi16 l3, 2
1602; CSKY-NEXT:  .LBB53_1: # %atomicrmw.start
1603; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1604; CSKY-NEXT:    zextb16 a1, a0
1605; CSKY-NEXT:    cmphs16 l2, a1
1606; CSKY-NEXT:    mov16 a2, l0
1607; CSKY-NEXT:    movt32 a2, a0
1608; CSKY-NEXT:    st32.b a0, (sp, 7)
1609; CSKY-NEXT:    st16.w l3, (sp, 0)
1610; CSKY-NEXT:    mov16 a0, l1
1611; CSKY-NEXT:    addi32 a1, sp, 7
1612; CSKY-NEXT:    movi16 a3, 4
1613; CSKY-NEXT:    jsri32 [.LCPI53_0]
1614; CSKY-NEXT:    mov16 a1, a0
1615; CSKY-NEXT:    ld32.b a0, (sp, 7)
1616; CSKY-NEXT:    bez32 a1, .LBB53_1
1617; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1618; CSKY-NEXT:    addi16 sp, sp, 8
1619; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1620; CSKY-NEXT:    ld16.w l0, (sp, 4)
1621; CSKY-NEXT:    ld16.w l1, (sp, 8)
1622; CSKY-NEXT:    ld16.w l2, (sp, 12)
1623; CSKY-NEXT:    ld16.w l3, (sp, 16)
1624; CSKY-NEXT:    addi16 sp, sp, 20
1625; CSKY-NEXT:    rts16
1626; CSKY-NEXT:    .p2align 1
1627; CSKY-NEXT:  # %bb.3:
1628; CSKY-NEXT:    .p2align 2
1629; CSKY-NEXT:  .LCPI53_0:
1630; CSKY-NEXT:    .long __atomic_compare_exchange_1
1631;
1632  %1 = atomicrmw umin i8* %a, i8 %b acq_rel
1633  ret i8 %1
1634}
1635
1636define i8 @atomicrmw_umin_i8_seq_cst(i8 *%a, i8 %b) nounwind {
1637; CSKY-LABEL: atomicrmw_umin_i8_seq_cst:
1638; CSKY:       # %bb.0:
1639; CSKY-NEXT:    subi16 sp, sp, 20
1640; CSKY-NEXT:    st16.w l3, (sp, 16)
1641; CSKY-NEXT:    st16.w l2, (sp, 12)
1642; CSKY-NEXT:    st16.w l1, (sp, 8)
1643; CSKY-NEXT:    st16.w l0, (sp, 4)
1644; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1645; CSKY-NEXT:    subi16 sp, sp, 8
1646; CSKY-NEXT:    mov16 l0, a1
1647; CSKY-NEXT:    mov16 l1, a0
1648; CSKY-NEXT:    ld16.b a0, (a0, 0)
1649; CSKY-NEXT:    zextb16 l2, a1
1650; CSKY-NEXT:    movi16 l3, 5
1651; CSKY-NEXT:  .LBB54_1: # %atomicrmw.start
1652; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
1653; CSKY-NEXT:    zextb16 a1, a0
1654; CSKY-NEXT:    cmphs16 l2, a1
1655; CSKY-NEXT:    mov16 a2, l0
1656; CSKY-NEXT:    movt32 a2, a0
1657; CSKY-NEXT:    st32.b a0, (sp, 7)
1658; CSKY-NEXT:    st16.w l3, (sp, 0)
1659; CSKY-NEXT:    mov16 a0, l1
1660; CSKY-NEXT:    addi32 a1, sp, 7
1661; CSKY-NEXT:    movi16 a3, 5
1662; CSKY-NEXT:    jsri32 [.LCPI54_0]
1663; CSKY-NEXT:    mov16 a1, a0
1664; CSKY-NEXT:    ld32.b a0, (sp, 7)
1665; CSKY-NEXT:    bez32 a1, .LBB54_1
1666; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
1667; CSKY-NEXT:    addi16 sp, sp, 8
1668; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1669; CSKY-NEXT:    ld16.w l0, (sp, 4)
1670; CSKY-NEXT:    ld16.w l1, (sp, 8)
1671; CSKY-NEXT:    ld16.w l2, (sp, 12)
1672; CSKY-NEXT:    ld16.w l3, (sp, 16)
1673; CSKY-NEXT:    addi16 sp, sp, 20
1674; CSKY-NEXT:    rts16
1675; CSKY-NEXT:    .p2align 1
1676; CSKY-NEXT:  # %bb.3:
1677; CSKY-NEXT:    .p2align 2
1678; CSKY-NEXT:  .LCPI54_0:
1679; CSKY-NEXT:    .long __atomic_compare_exchange_1
1680;
1681  %1 = atomicrmw umin i8* %a, i8 %b seq_cst
1682  ret i8 %1
1683}
1684
1685define i16 @atomicrmw_xchg_i16_monotonic(i16* %a, i16 %b) nounwind {
1686; CSKY-LABEL: atomicrmw_xchg_i16_monotonic:
1687; CSKY:       # %bb.0:
1688; CSKY-NEXT:    subi16 sp, sp, 4
1689; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1690; CSKY-NEXT:    movi16 a2, 0
1691; CSKY-NEXT:    jsri32 [.LCPI55_0]
1692; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1693; CSKY-NEXT:    addi16 sp, sp, 4
1694; CSKY-NEXT:    rts16
1695; CSKY-NEXT:    .p2align 1
1696; CSKY-NEXT:  # %bb.1:
1697; CSKY-NEXT:    .p2align 2
1698; CSKY-NEXT:  .LCPI55_0:
1699; CSKY-NEXT:    .long __atomic_exchange_2
1700;
1701  %1 = atomicrmw xchg i16* %a, i16 %b monotonic
1702  ret i16 %1
1703}
1704
1705define i16 @atomicrmw_xchg_i16_acquire(i16* %a, i16 %b) nounwind {
1706; CSKY-LABEL: atomicrmw_xchg_i16_acquire:
1707; CSKY:       # %bb.0:
1708; CSKY-NEXT:    subi16 sp, sp, 4
1709; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1710; CSKY-NEXT:    movi16 a2, 2
1711; CSKY-NEXT:    jsri32 [.LCPI56_0]
1712; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1713; CSKY-NEXT:    addi16 sp, sp, 4
1714; CSKY-NEXT:    rts16
1715; CSKY-NEXT:    .p2align 1
1716; CSKY-NEXT:  # %bb.1:
1717; CSKY-NEXT:    .p2align 2
1718; CSKY-NEXT:  .LCPI56_0:
1719; CSKY-NEXT:    .long __atomic_exchange_2
1720;
1721  %1 = atomicrmw xchg i16* %a, i16 %b acquire
1722  ret i16 %1
1723}
1724
1725define i16 @atomicrmw_xchg_i16_release(i16* %a, i16 %b) nounwind {
1726; CSKY-LABEL: atomicrmw_xchg_i16_release:
1727; CSKY:       # %bb.0:
1728; CSKY-NEXT:    subi16 sp, sp, 4
1729; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1730; CSKY-NEXT:    movi16 a2, 3
1731; CSKY-NEXT:    jsri32 [.LCPI57_0]
1732; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1733; CSKY-NEXT:    addi16 sp, sp, 4
1734; CSKY-NEXT:    rts16
1735; CSKY-NEXT:    .p2align 1
1736; CSKY-NEXT:  # %bb.1:
1737; CSKY-NEXT:    .p2align 2
1738; CSKY-NEXT:  .LCPI57_0:
1739; CSKY-NEXT:    .long __atomic_exchange_2
1740;
1741  %1 = atomicrmw xchg i16* %a, i16 %b release
1742  ret i16 %1
1743}
1744
1745define i16 @atomicrmw_xchg_i16_acq_rel(i16* %a, i16 %b) nounwind {
1746; CSKY-LABEL: atomicrmw_xchg_i16_acq_rel:
1747; CSKY:       # %bb.0:
1748; CSKY-NEXT:    subi16 sp, sp, 4
1749; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1750; CSKY-NEXT:    movi16 a2, 4
1751; CSKY-NEXT:    jsri32 [.LCPI58_0]
1752; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1753; CSKY-NEXT:    addi16 sp, sp, 4
1754; CSKY-NEXT:    rts16
1755; CSKY-NEXT:    .p2align 1
1756; CSKY-NEXT:  # %bb.1:
1757; CSKY-NEXT:    .p2align 2
1758; CSKY-NEXT:  .LCPI58_0:
1759; CSKY-NEXT:    .long __atomic_exchange_2
1760;
1761  %1 = atomicrmw xchg i16* %a, i16 %b acq_rel
1762  ret i16 %1
1763}
1764
1765define i16 @atomicrmw_xchg_i16_seq_cst(i16* %a, i16 %b) nounwind {
1766; CSKY-LABEL: atomicrmw_xchg_i16_seq_cst:
1767; CSKY:       # %bb.0:
1768; CSKY-NEXT:    subi16 sp, sp, 4
1769; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1770; CSKY-NEXT:    movi16 a2, 5
1771; CSKY-NEXT:    jsri32 [.LCPI59_0]
1772; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1773; CSKY-NEXT:    addi16 sp, sp, 4
1774; CSKY-NEXT:    rts16
1775; CSKY-NEXT:    .p2align 1
1776; CSKY-NEXT:  # %bb.1:
1777; CSKY-NEXT:    .p2align 2
1778; CSKY-NEXT:  .LCPI59_0:
1779; CSKY-NEXT:    .long __atomic_exchange_2
1780;
1781  %1 = atomicrmw xchg i16* %a, i16 %b seq_cst
1782  ret i16 %1
1783}
1784
1785define i16 @atomicrmw_add_i16_monotonic(i16 *%a, i16 %b) nounwind {
1786; CSKY-LABEL: atomicrmw_add_i16_monotonic:
1787; CSKY:       # %bb.0:
1788; CSKY-NEXT:    subi16 sp, sp, 4
1789; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1790; CSKY-NEXT:    movi16 a2, 0
1791; CSKY-NEXT:    jsri32 [.LCPI60_0]
1792; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1793; CSKY-NEXT:    addi16 sp, sp, 4
1794; CSKY-NEXT:    rts16
1795; CSKY-NEXT:    .p2align 1
1796; CSKY-NEXT:  # %bb.1:
1797; CSKY-NEXT:    .p2align 2
1798; CSKY-NEXT:  .LCPI60_0:
1799; CSKY-NEXT:    .long __atomic_fetch_add_2
1800;
1801  %1 = atomicrmw add i16* %a, i16 %b monotonic
1802  ret i16 %1
1803}
1804
1805define i16 @atomicrmw_add_i16_acquire(i16 *%a, i16 %b) nounwind {
1806; CSKY-LABEL: atomicrmw_add_i16_acquire:
1807; CSKY:       # %bb.0:
1808; CSKY-NEXT:    subi16 sp, sp, 4
1809; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1810; CSKY-NEXT:    movi16 a2, 2
1811; CSKY-NEXT:    jsri32 [.LCPI61_0]
1812; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1813; CSKY-NEXT:    addi16 sp, sp, 4
1814; CSKY-NEXT:    rts16
1815; CSKY-NEXT:    .p2align 1
1816; CSKY-NEXT:  # %bb.1:
1817; CSKY-NEXT:    .p2align 2
1818; CSKY-NEXT:  .LCPI61_0:
1819; CSKY-NEXT:    .long __atomic_fetch_add_2
1820;
1821  %1 = atomicrmw add i16* %a, i16 %b acquire
1822  ret i16 %1
1823}
1824
1825define i16 @atomicrmw_add_i16_release(i16 *%a, i16 %b) nounwind {
1826; CSKY-LABEL: atomicrmw_add_i16_release:
1827; CSKY:       # %bb.0:
1828; CSKY-NEXT:    subi16 sp, sp, 4
1829; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1830; CSKY-NEXT:    movi16 a2, 3
1831; CSKY-NEXT:    jsri32 [.LCPI62_0]
1832; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1833; CSKY-NEXT:    addi16 sp, sp, 4
1834; CSKY-NEXT:    rts16
1835; CSKY-NEXT:    .p2align 1
1836; CSKY-NEXT:  # %bb.1:
1837; CSKY-NEXT:    .p2align 2
1838; CSKY-NEXT:  .LCPI62_0:
1839; CSKY-NEXT:    .long __atomic_fetch_add_2
1840;
1841  %1 = atomicrmw add i16* %a, i16 %b release
1842  ret i16 %1
1843}
1844
1845define i16 @atomicrmw_add_i16_acq_rel(i16 *%a, i16 %b) nounwind {
1846; CSKY-LABEL: atomicrmw_add_i16_acq_rel:
1847; CSKY:       # %bb.0:
1848; CSKY-NEXT:    subi16 sp, sp, 4
1849; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1850; CSKY-NEXT:    movi16 a2, 4
1851; CSKY-NEXT:    jsri32 [.LCPI63_0]
1852; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1853; CSKY-NEXT:    addi16 sp, sp, 4
1854; CSKY-NEXT:    rts16
1855; CSKY-NEXT:    .p2align 1
1856; CSKY-NEXT:  # %bb.1:
1857; CSKY-NEXT:    .p2align 2
1858; CSKY-NEXT:  .LCPI63_0:
1859; CSKY-NEXT:    .long __atomic_fetch_add_2
1860;
1861  %1 = atomicrmw add i16* %a, i16 %b acq_rel
1862  ret i16 %1
1863}
1864
1865define i16 @atomicrmw_add_i16_seq_cst(i16 *%a, i16 %b) nounwind {
1866; CSKY-LABEL: atomicrmw_add_i16_seq_cst:
1867; CSKY:       # %bb.0:
1868; CSKY-NEXT:    subi16 sp, sp, 4
1869; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1870; CSKY-NEXT:    movi16 a2, 5
1871; CSKY-NEXT:    jsri32 [.LCPI64_0]
1872; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1873; CSKY-NEXT:    addi16 sp, sp, 4
1874; CSKY-NEXT:    rts16
1875; CSKY-NEXT:    .p2align 1
1876; CSKY-NEXT:  # %bb.1:
1877; CSKY-NEXT:    .p2align 2
1878; CSKY-NEXT:  .LCPI64_0:
1879; CSKY-NEXT:    .long __atomic_fetch_add_2
1880;
1881  %1 = atomicrmw add i16* %a, i16 %b seq_cst
1882  ret i16 %1
1883}
1884
1885define i16 @atomicrmw_sub_i16_monotonic(i16* %a, i16 %b) nounwind {
1886; CSKY-LABEL: atomicrmw_sub_i16_monotonic:
1887; CSKY:       # %bb.0:
1888; CSKY-NEXT:    subi16 sp, sp, 4
1889; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1890; CSKY-NEXT:    movi16 a2, 0
1891; CSKY-NEXT:    jsri32 [.LCPI65_0]
1892; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1893; CSKY-NEXT:    addi16 sp, sp, 4
1894; CSKY-NEXT:    rts16
1895; CSKY-NEXT:    .p2align 1
1896; CSKY-NEXT:  # %bb.1:
1897; CSKY-NEXT:    .p2align 2
1898; CSKY-NEXT:  .LCPI65_0:
1899; CSKY-NEXT:    .long __atomic_fetch_sub_2
1900;
1901  %1 = atomicrmw sub i16* %a, i16 %b monotonic
1902  ret i16 %1
1903}
1904
1905define i16 @atomicrmw_sub_i16_acquire(i16* %a, i16 %b) nounwind {
1906; CSKY-LABEL: atomicrmw_sub_i16_acquire:
1907; CSKY:       # %bb.0:
1908; CSKY-NEXT:    subi16 sp, sp, 4
1909; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1910; CSKY-NEXT:    movi16 a2, 2
1911; CSKY-NEXT:    jsri32 [.LCPI66_0]
1912; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1913; CSKY-NEXT:    addi16 sp, sp, 4
1914; CSKY-NEXT:    rts16
1915; CSKY-NEXT:    .p2align 1
1916; CSKY-NEXT:  # %bb.1:
1917; CSKY-NEXT:    .p2align 2
1918; CSKY-NEXT:  .LCPI66_0:
1919; CSKY-NEXT:    .long __atomic_fetch_sub_2
1920;
1921  %1 = atomicrmw sub i16* %a, i16 %b acquire
1922  ret i16 %1
1923}
1924
1925define i16 @atomicrmw_sub_i16_release(i16* %a, i16 %b) nounwind {
1926; CSKY-LABEL: atomicrmw_sub_i16_release:
1927; CSKY:       # %bb.0:
1928; CSKY-NEXT:    subi16 sp, sp, 4
1929; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1930; CSKY-NEXT:    movi16 a2, 3
1931; CSKY-NEXT:    jsri32 [.LCPI67_0]
1932; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1933; CSKY-NEXT:    addi16 sp, sp, 4
1934; CSKY-NEXT:    rts16
1935; CSKY-NEXT:    .p2align 1
1936; CSKY-NEXT:  # %bb.1:
1937; CSKY-NEXT:    .p2align 2
1938; CSKY-NEXT:  .LCPI67_0:
1939; CSKY-NEXT:    .long __atomic_fetch_sub_2
1940;
1941  %1 = atomicrmw sub i16* %a, i16 %b release
1942  ret i16 %1
1943}
1944
1945define i16 @atomicrmw_sub_i16_acq_rel(i16* %a, i16 %b) nounwind {
1946; CSKY-LABEL: atomicrmw_sub_i16_acq_rel:
1947; CSKY:       # %bb.0:
1948; CSKY-NEXT:    subi16 sp, sp, 4
1949; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1950; CSKY-NEXT:    movi16 a2, 4
1951; CSKY-NEXT:    jsri32 [.LCPI68_0]
1952; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1953; CSKY-NEXT:    addi16 sp, sp, 4
1954; CSKY-NEXT:    rts16
1955; CSKY-NEXT:    .p2align 1
1956; CSKY-NEXT:  # %bb.1:
1957; CSKY-NEXT:    .p2align 2
1958; CSKY-NEXT:  .LCPI68_0:
1959; CSKY-NEXT:    .long __atomic_fetch_sub_2
1960;
1961  %1 = atomicrmw sub i16* %a, i16 %b acq_rel
1962  ret i16 %1
1963}
1964
1965define i16 @atomicrmw_sub_i16_seq_cst(i16* %a, i16 %b) nounwind {
1966; CSKY-LABEL: atomicrmw_sub_i16_seq_cst:
1967; CSKY:       # %bb.0:
1968; CSKY-NEXT:    subi16 sp, sp, 4
1969; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1970; CSKY-NEXT:    movi16 a2, 5
1971; CSKY-NEXT:    jsri32 [.LCPI69_0]
1972; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1973; CSKY-NEXT:    addi16 sp, sp, 4
1974; CSKY-NEXT:    rts16
1975; CSKY-NEXT:    .p2align 1
1976; CSKY-NEXT:  # %bb.1:
1977; CSKY-NEXT:    .p2align 2
1978; CSKY-NEXT:  .LCPI69_0:
1979; CSKY-NEXT:    .long __atomic_fetch_sub_2
1980;
1981  %1 = atomicrmw sub i16* %a, i16 %b seq_cst
1982  ret i16 %1
1983}
1984
1985define i16 @atomicrmw_and_i16_monotonic(i16 *%a, i16 %b) nounwind {
1986; CSKY-LABEL: atomicrmw_and_i16_monotonic:
1987; CSKY:       # %bb.0:
1988; CSKY-NEXT:    subi16 sp, sp, 4
1989; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
1990; CSKY-NEXT:    movi16 a2, 0
1991; CSKY-NEXT:    jsri32 [.LCPI70_0]
1992; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
1993; CSKY-NEXT:    addi16 sp, sp, 4
1994; CSKY-NEXT:    rts16
1995; CSKY-NEXT:    .p2align 1
1996; CSKY-NEXT:  # %bb.1:
1997; CSKY-NEXT:    .p2align 2
1998; CSKY-NEXT:  .LCPI70_0:
1999; CSKY-NEXT:    .long __atomic_fetch_and_2
2000;
2001  %1 = atomicrmw and i16* %a, i16 %b monotonic
2002  ret i16 %1
2003}
2004
2005define i16 @atomicrmw_and_i16_acquire(i16 *%a, i16 %b) nounwind {
2006; CSKY-LABEL: atomicrmw_and_i16_acquire:
2007; CSKY:       # %bb.0:
2008; CSKY-NEXT:    subi16 sp, sp, 4
2009; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2010; CSKY-NEXT:    movi16 a2, 2
2011; CSKY-NEXT:    jsri32 [.LCPI71_0]
2012; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2013; CSKY-NEXT:    addi16 sp, sp, 4
2014; CSKY-NEXT:    rts16
2015; CSKY-NEXT:    .p2align 1
2016; CSKY-NEXT:  # %bb.1:
2017; CSKY-NEXT:    .p2align 2
2018; CSKY-NEXT:  .LCPI71_0:
2019; CSKY-NEXT:    .long __atomic_fetch_and_2
2020;
2021  %1 = atomicrmw and i16* %a, i16 %b acquire
2022  ret i16 %1
2023}
2024
2025define i16 @atomicrmw_and_i16_release(i16 *%a, i16 %b) nounwind {
2026; CSKY-LABEL: atomicrmw_and_i16_release:
2027; CSKY:       # %bb.0:
2028; CSKY-NEXT:    subi16 sp, sp, 4
2029; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2030; CSKY-NEXT:    movi16 a2, 3
2031; CSKY-NEXT:    jsri32 [.LCPI72_0]
2032; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2033; CSKY-NEXT:    addi16 sp, sp, 4
2034; CSKY-NEXT:    rts16
2035; CSKY-NEXT:    .p2align 1
2036; CSKY-NEXT:  # %bb.1:
2037; CSKY-NEXT:    .p2align 2
2038; CSKY-NEXT:  .LCPI72_0:
2039; CSKY-NEXT:    .long __atomic_fetch_and_2
2040;
2041  %1 = atomicrmw and i16* %a, i16 %b release
2042  ret i16 %1
2043}
2044
2045define i16 @atomicrmw_and_i16_acq_rel(i16 *%a, i16 %b) nounwind {
2046; CSKY-LABEL: atomicrmw_and_i16_acq_rel:
2047; CSKY:       # %bb.0:
2048; CSKY-NEXT:    subi16 sp, sp, 4
2049; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2050; CSKY-NEXT:    movi16 a2, 4
2051; CSKY-NEXT:    jsri32 [.LCPI73_0]
2052; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2053; CSKY-NEXT:    addi16 sp, sp, 4
2054; CSKY-NEXT:    rts16
2055; CSKY-NEXT:    .p2align 1
2056; CSKY-NEXT:  # %bb.1:
2057; CSKY-NEXT:    .p2align 2
2058; CSKY-NEXT:  .LCPI73_0:
2059; CSKY-NEXT:    .long __atomic_fetch_and_2
2060;
2061  %1 = atomicrmw and i16* %a, i16 %b acq_rel
2062  ret i16 %1
2063}
2064
2065define i16 @atomicrmw_and_i16_seq_cst(i16 *%a, i16 %b) nounwind {
2066; CSKY-LABEL: atomicrmw_and_i16_seq_cst:
2067; CSKY:       # %bb.0:
2068; CSKY-NEXT:    subi16 sp, sp, 4
2069; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2070; CSKY-NEXT:    movi16 a2, 5
2071; CSKY-NEXT:    jsri32 [.LCPI74_0]
2072; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2073; CSKY-NEXT:    addi16 sp, sp, 4
2074; CSKY-NEXT:    rts16
2075; CSKY-NEXT:    .p2align 1
2076; CSKY-NEXT:  # %bb.1:
2077; CSKY-NEXT:    .p2align 2
2078; CSKY-NEXT:  .LCPI74_0:
2079; CSKY-NEXT:    .long __atomic_fetch_and_2
2080;
2081  %1 = atomicrmw and i16* %a, i16 %b seq_cst
2082  ret i16 %1
2083}
2084
2085define i16 @atomicrmw_nand_i16_monotonic(i16* %a, i16 %b) nounwind {
2086; CSKY-LABEL: atomicrmw_nand_i16_monotonic:
2087; CSKY:       # %bb.0:
2088; CSKY-NEXT:    subi16 sp, sp, 4
2089; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2090; CSKY-NEXT:    movi16 a2, 0
2091; CSKY-NEXT:    jsri32 [.LCPI75_0]
2092; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2093; CSKY-NEXT:    addi16 sp, sp, 4
2094; CSKY-NEXT:    rts16
2095; CSKY-NEXT:    .p2align 1
2096; CSKY-NEXT:  # %bb.1:
2097; CSKY-NEXT:    .p2align 2
2098; CSKY-NEXT:  .LCPI75_0:
2099; CSKY-NEXT:    .long __atomic_fetch_nand_2
2100;
2101  %1 = atomicrmw nand i16* %a, i16 %b monotonic
2102  ret i16 %1
2103}
2104
2105define i16 @atomicrmw_nand_i16_acquire(i16* %a, i16 %b) nounwind {
2106; CSKY-LABEL: atomicrmw_nand_i16_acquire:
2107; CSKY:       # %bb.0:
2108; CSKY-NEXT:    subi16 sp, sp, 4
2109; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2110; CSKY-NEXT:    movi16 a2, 2
2111; CSKY-NEXT:    jsri32 [.LCPI76_0]
2112; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2113; CSKY-NEXT:    addi16 sp, sp, 4
2114; CSKY-NEXT:    rts16
2115; CSKY-NEXT:    .p2align 1
2116; CSKY-NEXT:  # %bb.1:
2117; CSKY-NEXT:    .p2align 2
2118; CSKY-NEXT:  .LCPI76_0:
2119; CSKY-NEXT:    .long __atomic_fetch_nand_2
2120;
2121  %1 = atomicrmw nand i16* %a, i16 %b acquire
2122  ret i16 %1
2123}
2124
2125define i16 @atomicrmw_nand_i16_release(i16* %a, i16 %b) nounwind {
2126; CSKY-LABEL: atomicrmw_nand_i16_release:
2127; CSKY:       # %bb.0:
2128; CSKY-NEXT:    subi16 sp, sp, 4
2129; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2130; CSKY-NEXT:    movi16 a2, 3
2131; CSKY-NEXT:    jsri32 [.LCPI77_0]
2132; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2133; CSKY-NEXT:    addi16 sp, sp, 4
2134; CSKY-NEXT:    rts16
2135; CSKY-NEXT:    .p2align 1
2136; CSKY-NEXT:  # %bb.1:
2137; CSKY-NEXT:    .p2align 2
2138; CSKY-NEXT:  .LCPI77_0:
2139; CSKY-NEXT:    .long __atomic_fetch_nand_2
2140;
2141  %1 = atomicrmw nand i16* %a, i16 %b release
2142  ret i16 %1
2143}
2144
2145define i16 @atomicrmw_nand_i16_acq_rel(i16* %a, i16 %b) nounwind {
2146; CSKY-LABEL: atomicrmw_nand_i16_acq_rel:
2147; CSKY:       # %bb.0:
2148; CSKY-NEXT:    subi16 sp, sp, 4
2149; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2150; CSKY-NEXT:    movi16 a2, 4
2151; CSKY-NEXT:    jsri32 [.LCPI78_0]
2152; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2153; CSKY-NEXT:    addi16 sp, sp, 4
2154; CSKY-NEXT:    rts16
2155; CSKY-NEXT:    .p2align 1
2156; CSKY-NEXT:  # %bb.1:
2157; CSKY-NEXT:    .p2align 2
2158; CSKY-NEXT:  .LCPI78_0:
2159; CSKY-NEXT:    .long __atomic_fetch_nand_2
2160;
2161  %1 = atomicrmw nand i16* %a, i16 %b acq_rel
2162  ret i16 %1
2163}
2164
2165define i16 @atomicrmw_nand_i16_seq_cst(i16* %a, i16 %b) nounwind {
2166; CSKY-LABEL: atomicrmw_nand_i16_seq_cst:
2167; CSKY:       # %bb.0:
2168; CSKY-NEXT:    subi16 sp, sp, 4
2169; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2170; CSKY-NEXT:    movi16 a2, 5
2171; CSKY-NEXT:    jsri32 [.LCPI79_0]
2172; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2173; CSKY-NEXT:    addi16 sp, sp, 4
2174; CSKY-NEXT:    rts16
2175; CSKY-NEXT:    .p2align 1
2176; CSKY-NEXT:  # %bb.1:
2177; CSKY-NEXT:    .p2align 2
2178; CSKY-NEXT:  .LCPI79_0:
2179; CSKY-NEXT:    .long __atomic_fetch_nand_2
2180;
2181  %1 = atomicrmw nand i16* %a, i16 %b seq_cst
2182  ret i16 %1
2183}
2184
2185define i16 @atomicrmw_or_i16_monotonic(i16 *%a, i16 %b) nounwind {
2186; CSKY-LABEL: atomicrmw_or_i16_monotonic:
2187; CSKY:       # %bb.0:
2188; CSKY-NEXT:    subi16 sp, sp, 4
2189; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2190; CSKY-NEXT:    movi16 a2, 0
2191; CSKY-NEXT:    jsri32 [.LCPI80_0]
2192; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2193; CSKY-NEXT:    addi16 sp, sp, 4
2194; CSKY-NEXT:    rts16
2195; CSKY-NEXT:    .p2align 1
2196; CSKY-NEXT:  # %bb.1:
2197; CSKY-NEXT:    .p2align 2
2198; CSKY-NEXT:  .LCPI80_0:
2199; CSKY-NEXT:    .long __atomic_fetch_or_2
2200;
2201  %1 = atomicrmw or i16* %a, i16 %b monotonic
2202  ret i16 %1
2203}
2204
2205define i16 @atomicrmw_or_i16_acquire(i16 *%a, i16 %b) nounwind {
2206; CSKY-LABEL: atomicrmw_or_i16_acquire:
2207; CSKY:       # %bb.0:
2208; CSKY-NEXT:    subi16 sp, sp, 4
2209; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2210; CSKY-NEXT:    movi16 a2, 2
2211; CSKY-NEXT:    jsri32 [.LCPI81_0]
2212; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2213; CSKY-NEXT:    addi16 sp, sp, 4
2214; CSKY-NEXT:    rts16
2215; CSKY-NEXT:    .p2align 1
2216; CSKY-NEXT:  # %bb.1:
2217; CSKY-NEXT:    .p2align 2
2218; CSKY-NEXT:  .LCPI81_0:
2219; CSKY-NEXT:    .long __atomic_fetch_or_2
2220;
2221  %1 = atomicrmw or i16* %a, i16 %b acquire
2222  ret i16 %1
2223}
2224
2225define i16 @atomicrmw_or_i16_release(i16 *%a, i16 %b) nounwind {
2226; CSKY-LABEL: atomicrmw_or_i16_release:
2227; CSKY:       # %bb.0:
2228; CSKY-NEXT:    subi16 sp, sp, 4
2229; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2230; CSKY-NEXT:    movi16 a2, 3
2231; CSKY-NEXT:    jsri32 [.LCPI82_0]
2232; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2233; CSKY-NEXT:    addi16 sp, sp, 4
2234; CSKY-NEXT:    rts16
2235; CSKY-NEXT:    .p2align 1
2236; CSKY-NEXT:  # %bb.1:
2237; CSKY-NEXT:    .p2align 2
2238; CSKY-NEXT:  .LCPI82_0:
2239; CSKY-NEXT:    .long __atomic_fetch_or_2
2240;
2241  %1 = atomicrmw or i16* %a, i16 %b release
2242  ret i16 %1
2243}
2244
2245define i16 @atomicrmw_or_i16_acq_rel(i16 *%a, i16 %b) nounwind {
2246; CSKY-LABEL: atomicrmw_or_i16_acq_rel:
2247; CSKY:       # %bb.0:
2248; CSKY-NEXT:    subi16 sp, sp, 4
2249; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2250; CSKY-NEXT:    movi16 a2, 4
2251; CSKY-NEXT:    jsri32 [.LCPI83_0]
2252; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2253; CSKY-NEXT:    addi16 sp, sp, 4
2254; CSKY-NEXT:    rts16
2255; CSKY-NEXT:    .p2align 1
2256; CSKY-NEXT:  # %bb.1:
2257; CSKY-NEXT:    .p2align 2
2258; CSKY-NEXT:  .LCPI83_0:
2259; CSKY-NEXT:    .long __atomic_fetch_or_2
2260;
2261  %1 = atomicrmw or i16* %a, i16 %b acq_rel
2262  ret i16 %1
2263}
2264
2265define i16 @atomicrmw_or_i16_seq_cst(i16 *%a, i16 %b) nounwind {
2266; CSKY-LABEL: atomicrmw_or_i16_seq_cst:
2267; CSKY:       # %bb.0:
2268; CSKY-NEXT:    subi16 sp, sp, 4
2269; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2270; CSKY-NEXT:    movi16 a2, 5
2271; CSKY-NEXT:    jsri32 [.LCPI84_0]
2272; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2273; CSKY-NEXT:    addi16 sp, sp, 4
2274; CSKY-NEXT:    rts16
2275; CSKY-NEXT:    .p2align 1
2276; CSKY-NEXT:  # %bb.1:
2277; CSKY-NEXT:    .p2align 2
2278; CSKY-NEXT:  .LCPI84_0:
2279; CSKY-NEXT:    .long __atomic_fetch_or_2
2280;
2281  %1 = atomicrmw or i16* %a, i16 %b seq_cst
2282  ret i16 %1
2283}
2284
2285define i16 @atomicrmw_xor_i16_monotonic(i16 *%a, i16 %b) nounwind {
2286; CSKY-LABEL: atomicrmw_xor_i16_monotonic:
2287; CSKY:       # %bb.0:
2288; CSKY-NEXT:    subi16 sp, sp, 4
2289; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2290; CSKY-NEXT:    movi16 a2, 0
2291; CSKY-NEXT:    jsri32 [.LCPI85_0]
2292; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2293; CSKY-NEXT:    addi16 sp, sp, 4
2294; CSKY-NEXT:    rts16
2295; CSKY-NEXT:    .p2align 1
2296; CSKY-NEXT:  # %bb.1:
2297; CSKY-NEXT:    .p2align 2
2298; CSKY-NEXT:  .LCPI85_0:
2299; CSKY-NEXT:    .long __atomic_fetch_xor_2
2300;
2301  %1 = atomicrmw xor i16* %a, i16 %b monotonic
2302  ret i16 %1
2303}
2304
2305define i16 @atomicrmw_xor_i16_acquire(i16 *%a, i16 %b) nounwind {
2306; CSKY-LABEL: atomicrmw_xor_i16_acquire:
2307; CSKY:       # %bb.0:
2308; CSKY-NEXT:    subi16 sp, sp, 4
2309; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2310; CSKY-NEXT:    movi16 a2, 2
2311; CSKY-NEXT:    jsri32 [.LCPI86_0]
2312; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2313; CSKY-NEXT:    addi16 sp, sp, 4
2314; CSKY-NEXT:    rts16
2315; CSKY-NEXT:    .p2align 1
2316; CSKY-NEXT:  # %bb.1:
2317; CSKY-NEXT:    .p2align 2
2318; CSKY-NEXT:  .LCPI86_0:
2319; CSKY-NEXT:    .long __atomic_fetch_xor_2
2320;
2321  %1 = atomicrmw xor i16* %a, i16 %b acquire
2322  ret i16 %1
2323}
2324
2325define i16 @atomicrmw_xor_i16_release(i16 *%a, i16 %b) nounwind {
2326; CSKY-LABEL: atomicrmw_xor_i16_release:
2327; CSKY:       # %bb.0:
2328; CSKY-NEXT:    subi16 sp, sp, 4
2329; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2330; CSKY-NEXT:    movi16 a2, 3
2331; CSKY-NEXT:    jsri32 [.LCPI87_0]
2332; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2333; CSKY-NEXT:    addi16 sp, sp, 4
2334; CSKY-NEXT:    rts16
2335; CSKY-NEXT:    .p2align 1
2336; CSKY-NEXT:  # %bb.1:
2337; CSKY-NEXT:    .p2align 2
2338; CSKY-NEXT:  .LCPI87_0:
2339; CSKY-NEXT:    .long __atomic_fetch_xor_2
2340;
2341  %1 = atomicrmw xor i16* %a, i16 %b release
2342  ret i16 %1
2343}
2344
2345define i16 @atomicrmw_xor_i16_acq_rel(i16 *%a, i16 %b) nounwind {
2346; CSKY-LABEL: atomicrmw_xor_i16_acq_rel:
2347; CSKY:       # %bb.0:
2348; CSKY-NEXT:    subi16 sp, sp, 4
2349; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2350; CSKY-NEXT:    movi16 a2, 4
2351; CSKY-NEXT:    jsri32 [.LCPI88_0]
2352; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2353; CSKY-NEXT:    addi16 sp, sp, 4
2354; CSKY-NEXT:    rts16
2355; CSKY-NEXT:    .p2align 1
2356; CSKY-NEXT:  # %bb.1:
2357; CSKY-NEXT:    .p2align 2
2358; CSKY-NEXT:  .LCPI88_0:
2359; CSKY-NEXT:    .long __atomic_fetch_xor_2
2360;
2361  %1 = atomicrmw xor i16* %a, i16 %b acq_rel
2362  ret i16 %1
2363}
2364
2365define i16 @atomicrmw_xor_i16_seq_cst(i16 *%a, i16 %b) nounwind {
2366; CSKY-LABEL: atomicrmw_xor_i16_seq_cst:
2367; CSKY:       # %bb.0:
2368; CSKY-NEXT:    subi16 sp, sp, 4
2369; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2370; CSKY-NEXT:    movi16 a2, 5
2371; CSKY-NEXT:    jsri32 [.LCPI89_0]
2372; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2373; CSKY-NEXT:    addi16 sp, sp, 4
2374; CSKY-NEXT:    rts16
2375; CSKY-NEXT:    .p2align 1
2376; CSKY-NEXT:  # %bb.1:
2377; CSKY-NEXT:    .p2align 2
2378; CSKY-NEXT:  .LCPI89_0:
2379; CSKY-NEXT:    .long __atomic_fetch_xor_2
2380;
2381  %1 = atomicrmw xor i16* %a, i16 %b seq_cst
2382  ret i16 %1
2383}
2384
2385define i16 @atomicrmw_max_i16_monotonic(i16 *%a, i16 %b) nounwind {
2386; CSKY-LABEL: atomicrmw_max_i16_monotonic:
2387; CSKY:       # %bb.0:
2388; CSKY-NEXT:    subi16 sp, sp, 20
2389; CSKY-NEXT:    st16.w l3, (sp, 16)
2390; CSKY-NEXT:    st16.w l2, (sp, 12)
2391; CSKY-NEXT:    st16.w l1, (sp, 8)
2392; CSKY-NEXT:    st16.w l0, (sp, 4)
2393; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2394; CSKY-NEXT:    subi16 sp, sp, 8
2395; CSKY-NEXT:    mov16 l0, a1
2396; CSKY-NEXT:    mov16 l1, a0
2397; CSKY-NEXT:    ld16.h a0, (a0, 0)
2398; CSKY-NEXT:    sexth16 l2, a1
2399; CSKY-NEXT:    movi16 l3, 0
2400; CSKY-NEXT:  .LBB90_1: # %atomicrmw.start
2401; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2402; CSKY-NEXT:    sexth16 a1, a0
2403; CSKY-NEXT:    cmplt16 l2, a1
2404; CSKY-NEXT:    mov16 a2, l0
2405; CSKY-NEXT:    movt32 a2, a0
2406; CSKY-NEXT:    st32.h a0, (sp, 6)
2407; CSKY-NEXT:    st16.w l3, (sp, 0)
2408; CSKY-NEXT:    mov16 a0, l1
2409; CSKY-NEXT:    addi32 a1, sp, 6
2410; CSKY-NEXT:    movi16 a3, 0
2411; CSKY-NEXT:    jsri32 [.LCPI90_0]
2412; CSKY-NEXT:    mov16 a1, a0
2413; CSKY-NEXT:    ld32.h a0, (sp, 6)
2414; CSKY-NEXT:    bez32 a1, .LBB90_1
2415; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2416; CSKY-NEXT:    addi16 sp, sp, 8
2417; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2418; CSKY-NEXT:    ld16.w l0, (sp, 4)
2419; CSKY-NEXT:    ld16.w l1, (sp, 8)
2420; CSKY-NEXT:    ld16.w l2, (sp, 12)
2421; CSKY-NEXT:    ld16.w l3, (sp, 16)
2422; CSKY-NEXT:    addi16 sp, sp, 20
2423; CSKY-NEXT:    rts16
2424; CSKY-NEXT:    .p2align 1
2425; CSKY-NEXT:  # %bb.3:
2426; CSKY-NEXT:    .p2align 2
2427; CSKY-NEXT:  .LCPI90_0:
2428; CSKY-NEXT:    .long __atomic_compare_exchange_2
2429;
2430  %1 = atomicrmw max i16* %a, i16 %b monotonic
2431  ret i16 %1
2432}
2433
2434define i16 @atomicrmw_max_i16_acquire(i16 *%a, i16 %b) nounwind {
2435; CSKY-LABEL: atomicrmw_max_i16_acquire:
2436; CSKY:       # %bb.0:
2437; CSKY-NEXT:    subi16 sp, sp, 20
2438; CSKY-NEXT:    st16.w l3, (sp, 16)
2439; CSKY-NEXT:    st16.w l2, (sp, 12)
2440; CSKY-NEXT:    st16.w l1, (sp, 8)
2441; CSKY-NEXT:    st16.w l0, (sp, 4)
2442; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2443; CSKY-NEXT:    subi16 sp, sp, 8
2444; CSKY-NEXT:    mov16 l0, a1
2445; CSKY-NEXT:    mov16 l1, a0
2446; CSKY-NEXT:    ld16.h a0, (a0, 0)
2447; CSKY-NEXT:    sexth16 l2, a1
2448; CSKY-NEXT:    movi16 l3, 2
2449; CSKY-NEXT:  .LBB91_1: # %atomicrmw.start
2450; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2451; CSKY-NEXT:    sexth16 a1, a0
2452; CSKY-NEXT:    cmplt16 l2, a1
2453; CSKY-NEXT:    mov16 a2, l0
2454; CSKY-NEXT:    movt32 a2, a0
2455; CSKY-NEXT:    st32.h a0, (sp, 6)
2456; CSKY-NEXT:    st16.w l3, (sp, 0)
2457; CSKY-NEXT:    mov16 a0, l1
2458; CSKY-NEXT:    addi32 a1, sp, 6
2459; CSKY-NEXT:    movi16 a3, 2
2460; CSKY-NEXT:    jsri32 [.LCPI91_0]
2461; CSKY-NEXT:    mov16 a1, a0
2462; CSKY-NEXT:    ld32.h a0, (sp, 6)
2463; CSKY-NEXT:    bez32 a1, .LBB91_1
2464; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2465; CSKY-NEXT:    addi16 sp, sp, 8
2466; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2467; CSKY-NEXT:    ld16.w l0, (sp, 4)
2468; CSKY-NEXT:    ld16.w l1, (sp, 8)
2469; CSKY-NEXT:    ld16.w l2, (sp, 12)
2470; CSKY-NEXT:    ld16.w l3, (sp, 16)
2471; CSKY-NEXT:    addi16 sp, sp, 20
2472; CSKY-NEXT:    rts16
2473; CSKY-NEXT:    .p2align 1
2474; CSKY-NEXT:  # %bb.3:
2475; CSKY-NEXT:    .p2align 2
2476; CSKY-NEXT:  .LCPI91_0:
2477; CSKY-NEXT:    .long __atomic_compare_exchange_2
2478;
2479  %1 = atomicrmw max i16* %a, i16 %b acquire
2480  ret i16 %1
2481}
2482
2483define i16 @atomicrmw_max_i16_release(i16 *%a, i16 %b) nounwind {
2484; CSKY-LABEL: atomicrmw_max_i16_release:
2485; CSKY:       # %bb.0:
2486; CSKY-NEXT:    subi16 sp, sp, 20
2487; CSKY-NEXT:    st16.w l3, (sp, 16)
2488; CSKY-NEXT:    st16.w l2, (sp, 12)
2489; CSKY-NEXT:    st16.w l1, (sp, 8)
2490; CSKY-NEXT:    st16.w l0, (sp, 4)
2491; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2492; CSKY-NEXT:    subi16 sp, sp, 8
2493; CSKY-NEXT:    mov16 l0, a1
2494; CSKY-NEXT:    mov16 l1, a0
2495; CSKY-NEXT:    ld16.h a0, (a0, 0)
2496; CSKY-NEXT:    sexth16 l2, a1
2497; CSKY-NEXT:    movi16 l3, 0
2498; CSKY-NEXT:  .LBB92_1: # %atomicrmw.start
2499; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2500; CSKY-NEXT:    sexth16 a1, a0
2501; CSKY-NEXT:    cmplt16 l2, a1
2502; CSKY-NEXT:    mov16 a2, l0
2503; CSKY-NEXT:    movt32 a2, a0
2504; CSKY-NEXT:    st32.h a0, (sp, 6)
2505; CSKY-NEXT:    st16.w l3, (sp, 0)
2506; CSKY-NEXT:    mov16 a0, l1
2507; CSKY-NEXT:    addi32 a1, sp, 6
2508; CSKY-NEXT:    movi16 a3, 3
2509; CSKY-NEXT:    jsri32 [.LCPI92_0]
2510; CSKY-NEXT:    mov16 a1, a0
2511; CSKY-NEXT:    ld32.h a0, (sp, 6)
2512; CSKY-NEXT:    bez32 a1, .LBB92_1
2513; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2514; CSKY-NEXT:    addi16 sp, sp, 8
2515; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2516; CSKY-NEXT:    ld16.w l0, (sp, 4)
2517; CSKY-NEXT:    ld16.w l1, (sp, 8)
2518; CSKY-NEXT:    ld16.w l2, (sp, 12)
2519; CSKY-NEXT:    ld16.w l3, (sp, 16)
2520; CSKY-NEXT:    addi16 sp, sp, 20
2521; CSKY-NEXT:    rts16
2522; CSKY-NEXT:    .p2align 1
2523; CSKY-NEXT:  # %bb.3:
2524; CSKY-NEXT:    .p2align 2
2525; CSKY-NEXT:  .LCPI92_0:
2526; CSKY-NEXT:    .long __atomic_compare_exchange_2
2527;
2528  %1 = atomicrmw max i16* %a, i16 %b release
2529  ret i16 %1
2530}
2531
2532define i16 @atomicrmw_max_i16_acq_rel(i16 *%a, i16 %b) nounwind {
2533; CSKY-LABEL: atomicrmw_max_i16_acq_rel:
2534; CSKY:       # %bb.0:
2535; CSKY-NEXT:    subi16 sp, sp, 20
2536; CSKY-NEXT:    st16.w l3, (sp, 16)
2537; CSKY-NEXT:    st16.w l2, (sp, 12)
2538; CSKY-NEXT:    st16.w l1, (sp, 8)
2539; CSKY-NEXT:    st16.w l0, (sp, 4)
2540; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2541; CSKY-NEXT:    subi16 sp, sp, 8
2542; CSKY-NEXT:    mov16 l0, a1
2543; CSKY-NEXT:    mov16 l1, a0
2544; CSKY-NEXT:    ld16.h a0, (a0, 0)
2545; CSKY-NEXT:    sexth16 l2, a1
2546; CSKY-NEXT:    movi16 l3, 2
2547; CSKY-NEXT:  .LBB93_1: # %atomicrmw.start
2548; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2549; CSKY-NEXT:    sexth16 a1, a0
2550; CSKY-NEXT:    cmplt16 l2, a1
2551; CSKY-NEXT:    mov16 a2, l0
2552; CSKY-NEXT:    movt32 a2, a0
2553; CSKY-NEXT:    st32.h a0, (sp, 6)
2554; CSKY-NEXT:    st16.w l3, (sp, 0)
2555; CSKY-NEXT:    mov16 a0, l1
2556; CSKY-NEXT:    addi32 a1, sp, 6
2557; CSKY-NEXT:    movi16 a3, 4
2558; CSKY-NEXT:    jsri32 [.LCPI93_0]
2559; CSKY-NEXT:    mov16 a1, a0
2560; CSKY-NEXT:    ld32.h a0, (sp, 6)
2561; CSKY-NEXT:    bez32 a1, .LBB93_1
2562; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2563; CSKY-NEXT:    addi16 sp, sp, 8
2564; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2565; CSKY-NEXT:    ld16.w l0, (sp, 4)
2566; CSKY-NEXT:    ld16.w l1, (sp, 8)
2567; CSKY-NEXT:    ld16.w l2, (sp, 12)
2568; CSKY-NEXT:    ld16.w l3, (sp, 16)
2569; CSKY-NEXT:    addi16 sp, sp, 20
2570; CSKY-NEXT:    rts16
2571; CSKY-NEXT:    .p2align 1
2572; CSKY-NEXT:  # %bb.3:
2573; CSKY-NEXT:    .p2align 2
2574; CSKY-NEXT:  .LCPI93_0:
2575; CSKY-NEXT:    .long __atomic_compare_exchange_2
2576;
2577  %1 = atomicrmw max i16* %a, i16 %b acq_rel
2578  ret i16 %1
2579}
2580
2581define i16 @atomicrmw_max_i16_seq_cst(i16 *%a, i16 %b) nounwind {
2582; CSKY-LABEL: atomicrmw_max_i16_seq_cst:
2583; CSKY:       # %bb.0:
2584; CSKY-NEXT:    subi16 sp, sp, 20
2585; CSKY-NEXT:    st16.w l3, (sp, 16)
2586; CSKY-NEXT:    st16.w l2, (sp, 12)
2587; CSKY-NEXT:    st16.w l1, (sp, 8)
2588; CSKY-NEXT:    st16.w l0, (sp, 4)
2589; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2590; CSKY-NEXT:    subi16 sp, sp, 8
2591; CSKY-NEXT:    mov16 l0, a1
2592; CSKY-NEXT:    mov16 l1, a0
2593; CSKY-NEXT:    ld16.h a0, (a0, 0)
2594; CSKY-NEXT:    sexth16 l2, a1
2595; CSKY-NEXT:    movi16 l3, 5
2596; CSKY-NEXT:  .LBB94_1: # %atomicrmw.start
2597; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2598; CSKY-NEXT:    sexth16 a1, a0
2599; CSKY-NEXT:    cmplt16 l2, a1
2600; CSKY-NEXT:    mov16 a2, l0
2601; CSKY-NEXT:    movt32 a2, a0
2602; CSKY-NEXT:    st32.h a0, (sp, 6)
2603; CSKY-NEXT:    st16.w l3, (sp, 0)
2604; CSKY-NEXT:    mov16 a0, l1
2605; CSKY-NEXT:    addi32 a1, sp, 6
2606; CSKY-NEXT:    movi16 a3, 5
2607; CSKY-NEXT:    jsri32 [.LCPI94_0]
2608; CSKY-NEXT:    mov16 a1, a0
2609; CSKY-NEXT:    ld32.h a0, (sp, 6)
2610; CSKY-NEXT:    bez32 a1, .LBB94_1
2611; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2612; CSKY-NEXT:    addi16 sp, sp, 8
2613; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2614; CSKY-NEXT:    ld16.w l0, (sp, 4)
2615; CSKY-NEXT:    ld16.w l1, (sp, 8)
2616; CSKY-NEXT:    ld16.w l2, (sp, 12)
2617; CSKY-NEXT:    ld16.w l3, (sp, 16)
2618; CSKY-NEXT:    addi16 sp, sp, 20
2619; CSKY-NEXT:    rts16
2620; CSKY-NEXT:    .p2align 1
2621; CSKY-NEXT:  # %bb.3:
2622; CSKY-NEXT:    .p2align 2
2623; CSKY-NEXT:  .LCPI94_0:
2624; CSKY-NEXT:    .long __atomic_compare_exchange_2
2625;
2626  %1 = atomicrmw max i16* %a, i16 %b seq_cst
2627  ret i16 %1
2628}
2629
2630define i16 @atomicrmw_min_i16_monotonic(i16 *%a, i16 %b) nounwind {
2631; CSKY-LABEL: atomicrmw_min_i16_monotonic:
2632; CSKY:       # %bb.0:
2633; CSKY-NEXT:    subi16 sp, sp, 20
2634; CSKY-NEXT:    st16.w l3, (sp, 16)
2635; CSKY-NEXT:    st16.w l2, (sp, 12)
2636; CSKY-NEXT:    st16.w l1, (sp, 8)
2637; CSKY-NEXT:    st16.w l0, (sp, 4)
2638; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2639; CSKY-NEXT:    subi16 sp, sp, 8
2640; CSKY-NEXT:    mov16 l0, a1
2641; CSKY-NEXT:    mov16 l1, a0
2642; CSKY-NEXT:    ld16.h a0, (a0, 0)
2643; CSKY-NEXT:    sexth16 l2, a1
2644; CSKY-NEXT:    movi16 l3, 0
2645; CSKY-NEXT:  .LBB95_1: # %atomicrmw.start
2646; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2647; CSKY-NEXT:    sexth16 a1, a0
2648; CSKY-NEXT:    cmplt16 l2, a1
2649; CSKY-NEXT:    mov16 a2, l0
2650; CSKY-NEXT:    movf32 a2, a0
2651; CSKY-NEXT:    st32.h a0, (sp, 6)
2652; CSKY-NEXT:    st16.w l3, (sp, 0)
2653; CSKY-NEXT:    mov16 a0, l1
2654; CSKY-NEXT:    addi32 a1, sp, 6
2655; CSKY-NEXT:    movi16 a3, 0
2656; CSKY-NEXT:    jsri32 [.LCPI95_0]
2657; CSKY-NEXT:    mov16 a1, a0
2658; CSKY-NEXT:    ld32.h a0, (sp, 6)
2659; CSKY-NEXT:    bez32 a1, .LBB95_1
2660; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2661; CSKY-NEXT:    addi16 sp, sp, 8
2662; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2663; CSKY-NEXT:    ld16.w l0, (sp, 4)
2664; CSKY-NEXT:    ld16.w l1, (sp, 8)
2665; CSKY-NEXT:    ld16.w l2, (sp, 12)
2666; CSKY-NEXT:    ld16.w l3, (sp, 16)
2667; CSKY-NEXT:    addi16 sp, sp, 20
2668; CSKY-NEXT:    rts16
2669; CSKY-NEXT:    .p2align 1
2670; CSKY-NEXT:  # %bb.3:
2671; CSKY-NEXT:    .p2align 2
2672; CSKY-NEXT:  .LCPI95_0:
2673; CSKY-NEXT:    .long __atomic_compare_exchange_2
2674;
2675  %1 = atomicrmw min i16* %a, i16 %b monotonic
2676  ret i16 %1
2677}
2678
2679define i16 @atomicrmw_min_i16_acquire(i16 *%a, i16 %b) nounwind {
2680; CSKY-LABEL: atomicrmw_min_i16_acquire:
2681; CSKY:       # %bb.0:
2682; CSKY-NEXT:    subi16 sp, sp, 20
2683; CSKY-NEXT:    st16.w l3, (sp, 16)
2684; CSKY-NEXT:    st16.w l2, (sp, 12)
2685; CSKY-NEXT:    st16.w l1, (sp, 8)
2686; CSKY-NEXT:    st16.w l0, (sp, 4)
2687; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2688; CSKY-NEXT:    subi16 sp, sp, 8
2689; CSKY-NEXT:    mov16 l0, a1
2690; CSKY-NEXT:    mov16 l1, a0
2691; CSKY-NEXT:    ld16.h a0, (a0, 0)
2692; CSKY-NEXT:    sexth16 l2, a1
2693; CSKY-NEXT:    movi16 l3, 2
2694; CSKY-NEXT:  .LBB96_1: # %atomicrmw.start
2695; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2696; CSKY-NEXT:    sexth16 a1, a0
2697; CSKY-NEXT:    cmplt16 l2, a1
2698; CSKY-NEXT:    mov16 a2, l0
2699; CSKY-NEXT:    movf32 a2, a0
2700; CSKY-NEXT:    st32.h a0, (sp, 6)
2701; CSKY-NEXT:    st16.w l3, (sp, 0)
2702; CSKY-NEXT:    mov16 a0, l1
2703; CSKY-NEXT:    addi32 a1, sp, 6
2704; CSKY-NEXT:    movi16 a3, 2
2705; CSKY-NEXT:    jsri32 [.LCPI96_0]
2706; CSKY-NEXT:    mov16 a1, a0
2707; CSKY-NEXT:    ld32.h a0, (sp, 6)
2708; CSKY-NEXT:    bez32 a1, .LBB96_1
2709; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2710; CSKY-NEXT:    addi16 sp, sp, 8
2711; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2712; CSKY-NEXT:    ld16.w l0, (sp, 4)
2713; CSKY-NEXT:    ld16.w l1, (sp, 8)
2714; CSKY-NEXT:    ld16.w l2, (sp, 12)
2715; CSKY-NEXT:    ld16.w l3, (sp, 16)
2716; CSKY-NEXT:    addi16 sp, sp, 20
2717; CSKY-NEXT:    rts16
2718; CSKY-NEXT:    .p2align 1
2719; CSKY-NEXT:  # %bb.3:
2720; CSKY-NEXT:    .p2align 2
2721; CSKY-NEXT:  .LCPI96_0:
2722; CSKY-NEXT:    .long __atomic_compare_exchange_2
2723;
2724  %1 = atomicrmw min i16* %a, i16 %b acquire
2725  ret i16 %1
2726}
2727
2728define i16 @atomicrmw_min_i16_release(i16 *%a, i16 %b) nounwind {
2729; CSKY-LABEL: atomicrmw_min_i16_release:
2730; CSKY:       # %bb.0:
2731; CSKY-NEXT:    subi16 sp, sp, 20
2732; CSKY-NEXT:    st16.w l3, (sp, 16)
2733; CSKY-NEXT:    st16.w l2, (sp, 12)
2734; CSKY-NEXT:    st16.w l1, (sp, 8)
2735; CSKY-NEXT:    st16.w l0, (sp, 4)
2736; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2737; CSKY-NEXT:    subi16 sp, sp, 8
2738; CSKY-NEXT:    mov16 l0, a1
2739; CSKY-NEXT:    mov16 l1, a0
2740; CSKY-NEXT:    ld16.h a0, (a0, 0)
2741; CSKY-NEXT:    sexth16 l2, a1
2742; CSKY-NEXT:    movi16 l3, 0
2743; CSKY-NEXT:  .LBB97_1: # %atomicrmw.start
2744; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2745; CSKY-NEXT:    sexth16 a1, a0
2746; CSKY-NEXT:    cmplt16 l2, a1
2747; CSKY-NEXT:    mov16 a2, l0
2748; CSKY-NEXT:    movf32 a2, a0
2749; CSKY-NEXT:    st32.h a0, (sp, 6)
2750; CSKY-NEXT:    st16.w l3, (sp, 0)
2751; CSKY-NEXT:    mov16 a0, l1
2752; CSKY-NEXT:    addi32 a1, sp, 6
2753; CSKY-NEXT:    movi16 a3, 3
2754; CSKY-NEXT:    jsri32 [.LCPI97_0]
2755; CSKY-NEXT:    mov16 a1, a0
2756; CSKY-NEXT:    ld32.h a0, (sp, 6)
2757; CSKY-NEXT:    bez32 a1, .LBB97_1
2758; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2759; CSKY-NEXT:    addi16 sp, sp, 8
2760; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2761; CSKY-NEXT:    ld16.w l0, (sp, 4)
2762; CSKY-NEXT:    ld16.w l1, (sp, 8)
2763; CSKY-NEXT:    ld16.w l2, (sp, 12)
2764; CSKY-NEXT:    ld16.w l3, (sp, 16)
2765; CSKY-NEXT:    addi16 sp, sp, 20
2766; CSKY-NEXT:    rts16
2767; CSKY-NEXT:    .p2align 1
2768; CSKY-NEXT:  # %bb.3:
2769; CSKY-NEXT:    .p2align 2
2770; CSKY-NEXT:  .LCPI97_0:
2771; CSKY-NEXT:    .long __atomic_compare_exchange_2
2772;
2773  %1 = atomicrmw min i16* %a, i16 %b release
2774  ret i16 %1
2775}
2776
2777define i16 @atomicrmw_min_i16_acq_rel(i16 *%a, i16 %b) nounwind {
2778; CSKY-LABEL: atomicrmw_min_i16_acq_rel:
2779; CSKY:       # %bb.0:
2780; CSKY-NEXT:    subi16 sp, sp, 20
2781; CSKY-NEXT:    st16.w l3, (sp, 16)
2782; CSKY-NEXT:    st16.w l2, (sp, 12)
2783; CSKY-NEXT:    st16.w l1, (sp, 8)
2784; CSKY-NEXT:    st16.w l0, (sp, 4)
2785; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2786; CSKY-NEXT:    subi16 sp, sp, 8
2787; CSKY-NEXT:    mov16 l0, a1
2788; CSKY-NEXT:    mov16 l1, a0
2789; CSKY-NEXT:    ld16.h a0, (a0, 0)
2790; CSKY-NEXT:    sexth16 l2, a1
2791; CSKY-NEXT:    movi16 l3, 2
2792; CSKY-NEXT:  .LBB98_1: # %atomicrmw.start
2793; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2794; CSKY-NEXT:    sexth16 a1, a0
2795; CSKY-NEXT:    cmplt16 l2, a1
2796; CSKY-NEXT:    mov16 a2, l0
2797; CSKY-NEXT:    movf32 a2, a0
2798; CSKY-NEXT:    st32.h a0, (sp, 6)
2799; CSKY-NEXT:    st16.w l3, (sp, 0)
2800; CSKY-NEXT:    mov16 a0, l1
2801; CSKY-NEXT:    addi32 a1, sp, 6
2802; CSKY-NEXT:    movi16 a3, 4
2803; CSKY-NEXT:    jsri32 [.LCPI98_0]
2804; CSKY-NEXT:    mov16 a1, a0
2805; CSKY-NEXT:    ld32.h a0, (sp, 6)
2806; CSKY-NEXT:    bez32 a1, .LBB98_1
2807; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2808; CSKY-NEXT:    addi16 sp, sp, 8
2809; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2810; CSKY-NEXT:    ld16.w l0, (sp, 4)
2811; CSKY-NEXT:    ld16.w l1, (sp, 8)
2812; CSKY-NEXT:    ld16.w l2, (sp, 12)
2813; CSKY-NEXT:    ld16.w l3, (sp, 16)
2814; CSKY-NEXT:    addi16 sp, sp, 20
2815; CSKY-NEXT:    rts16
2816; CSKY-NEXT:    .p2align 1
2817; CSKY-NEXT:  # %bb.3:
2818; CSKY-NEXT:    .p2align 2
2819; CSKY-NEXT:  .LCPI98_0:
2820; CSKY-NEXT:    .long __atomic_compare_exchange_2
2821;
2822  %1 = atomicrmw min i16* %a, i16 %b acq_rel
2823  ret i16 %1
2824}
2825
2826define i16 @atomicrmw_min_i16_seq_cst(i16 *%a, i16 %b) nounwind {
2827; CSKY-LABEL: atomicrmw_min_i16_seq_cst:
2828; CSKY:       # %bb.0:
2829; CSKY-NEXT:    subi16 sp, sp, 20
2830; CSKY-NEXT:    st16.w l3, (sp, 16)
2831; CSKY-NEXT:    st16.w l2, (sp, 12)
2832; CSKY-NEXT:    st16.w l1, (sp, 8)
2833; CSKY-NEXT:    st16.w l0, (sp, 4)
2834; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2835; CSKY-NEXT:    subi16 sp, sp, 8
2836; CSKY-NEXT:    mov16 l0, a1
2837; CSKY-NEXT:    mov16 l1, a0
2838; CSKY-NEXT:    ld16.h a0, (a0, 0)
2839; CSKY-NEXT:    sexth16 l2, a1
2840; CSKY-NEXT:    movi16 l3, 5
2841; CSKY-NEXT:  .LBB99_1: # %atomicrmw.start
2842; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2843; CSKY-NEXT:    sexth16 a1, a0
2844; CSKY-NEXT:    cmplt16 l2, a1
2845; CSKY-NEXT:    mov16 a2, l0
2846; CSKY-NEXT:    movf32 a2, a0
2847; CSKY-NEXT:    st32.h a0, (sp, 6)
2848; CSKY-NEXT:    st16.w l3, (sp, 0)
2849; CSKY-NEXT:    mov16 a0, l1
2850; CSKY-NEXT:    addi32 a1, sp, 6
2851; CSKY-NEXT:    movi16 a3, 5
2852; CSKY-NEXT:    jsri32 [.LCPI99_0]
2853; CSKY-NEXT:    mov16 a1, a0
2854; CSKY-NEXT:    ld32.h a0, (sp, 6)
2855; CSKY-NEXT:    bez32 a1, .LBB99_1
2856; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2857; CSKY-NEXT:    addi16 sp, sp, 8
2858; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2859; CSKY-NEXT:    ld16.w l0, (sp, 4)
2860; CSKY-NEXT:    ld16.w l1, (sp, 8)
2861; CSKY-NEXT:    ld16.w l2, (sp, 12)
2862; CSKY-NEXT:    ld16.w l3, (sp, 16)
2863; CSKY-NEXT:    addi16 sp, sp, 20
2864; CSKY-NEXT:    rts16
2865; CSKY-NEXT:    .p2align 1
2866; CSKY-NEXT:  # %bb.3:
2867; CSKY-NEXT:    .p2align 2
2868; CSKY-NEXT:  .LCPI99_0:
2869; CSKY-NEXT:    .long __atomic_compare_exchange_2
2870;
2871  %1 = atomicrmw min i16* %a, i16 %b seq_cst
2872  ret i16 %1
2873}
2874
2875define i16 @atomicrmw_umax_i16_monotonic(i16 *%a, i16 %b) nounwind {
2876; CSKY-LABEL: atomicrmw_umax_i16_monotonic:
2877; CSKY:       # %bb.0:
2878; CSKY-NEXT:    subi16 sp, sp, 20
2879; CSKY-NEXT:    st16.w l3, (sp, 16)
2880; CSKY-NEXT:    st16.w l2, (sp, 12)
2881; CSKY-NEXT:    st16.w l1, (sp, 8)
2882; CSKY-NEXT:    st16.w l0, (sp, 4)
2883; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2884; CSKY-NEXT:    subi16 sp, sp, 8
2885; CSKY-NEXT:    mov16 l0, a1
2886; CSKY-NEXT:    mov16 l1, a0
2887; CSKY-NEXT:    ld16.h a0, (a0, 0)
2888; CSKY-NEXT:    zexth16 l2, a1
2889; CSKY-NEXT:    movi16 l3, 0
2890; CSKY-NEXT:  .LBB100_1: # %atomicrmw.start
2891; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2892; CSKY-NEXT:    zexth16 a1, a0
2893; CSKY-NEXT:    cmphs16 l2, a1
2894; CSKY-NEXT:    mov16 a2, l0
2895; CSKY-NEXT:    movf32 a2, a0
2896; CSKY-NEXT:    st32.h a0, (sp, 6)
2897; CSKY-NEXT:    st16.w l3, (sp, 0)
2898; CSKY-NEXT:    mov16 a0, l1
2899; CSKY-NEXT:    addi32 a1, sp, 6
2900; CSKY-NEXT:    movi16 a3, 0
2901; CSKY-NEXT:    jsri32 [.LCPI100_0]
2902; CSKY-NEXT:    mov16 a1, a0
2903; CSKY-NEXT:    ld32.h a0, (sp, 6)
2904; CSKY-NEXT:    bez32 a1, .LBB100_1
2905; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2906; CSKY-NEXT:    addi16 sp, sp, 8
2907; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2908; CSKY-NEXT:    ld16.w l0, (sp, 4)
2909; CSKY-NEXT:    ld16.w l1, (sp, 8)
2910; CSKY-NEXT:    ld16.w l2, (sp, 12)
2911; CSKY-NEXT:    ld16.w l3, (sp, 16)
2912; CSKY-NEXT:    addi16 sp, sp, 20
2913; CSKY-NEXT:    rts16
2914; CSKY-NEXT:    .p2align 1
2915; CSKY-NEXT:  # %bb.3:
2916; CSKY-NEXT:    .p2align 2
2917; CSKY-NEXT:  .LCPI100_0:
2918; CSKY-NEXT:    .long __atomic_compare_exchange_2
2919;
2920  %1 = atomicrmw umax i16* %a, i16 %b monotonic
2921  ret i16 %1
2922}
2923
2924define i16 @atomicrmw_umax_i16_acquire(i16 *%a, i16 %b) nounwind {
2925; CSKY-LABEL: atomicrmw_umax_i16_acquire:
2926; CSKY:       # %bb.0:
2927; CSKY-NEXT:    subi16 sp, sp, 20
2928; CSKY-NEXT:    st16.w l3, (sp, 16)
2929; CSKY-NEXT:    st16.w l2, (sp, 12)
2930; CSKY-NEXT:    st16.w l1, (sp, 8)
2931; CSKY-NEXT:    st16.w l0, (sp, 4)
2932; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2933; CSKY-NEXT:    subi16 sp, sp, 8
2934; CSKY-NEXT:    mov16 l0, a1
2935; CSKY-NEXT:    mov16 l1, a0
2936; CSKY-NEXT:    ld16.h a0, (a0, 0)
2937; CSKY-NEXT:    zexth16 l2, a1
2938; CSKY-NEXT:    movi16 l3, 2
2939; CSKY-NEXT:  .LBB101_1: # %atomicrmw.start
2940; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2941; CSKY-NEXT:    zexth16 a1, a0
2942; CSKY-NEXT:    cmphs16 l2, a1
2943; CSKY-NEXT:    mov16 a2, l0
2944; CSKY-NEXT:    movf32 a2, a0
2945; CSKY-NEXT:    st32.h a0, (sp, 6)
2946; CSKY-NEXT:    st16.w l3, (sp, 0)
2947; CSKY-NEXT:    mov16 a0, l1
2948; CSKY-NEXT:    addi32 a1, sp, 6
2949; CSKY-NEXT:    movi16 a3, 2
2950; CSKY-NEXT:    jsri32 [.LCPI101_0]
2951; CSKY-NEXT:    mov16 a1, a0
2952; CSKY-NEXT:    ld32.h a0, (sp, 6)
2953; CSKY-NEXT:    bez32 a1, .LBB101_1
2954; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
2955; CSKY-NEXT:    addi16 sp, sp, 8
2956; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
2957; CSKY-NEXT:    ld16.w l0, (sp, 4)
2958; CSKY-NEXT:    ld16.w l1, (sp, 8)
2959; CSKY-NEXT:    ld16.w l2, (sp, 12)
2960; CSKY-NEXT:    ld16.w l3, (sp, 16)
2961; CSKY-NEXT:    addi16 sp, sp, 20
2962; CSKY-NEXT:    rts16
2963; CSKY-NEXT:    .p2align 1
2964; CSKY-NEXT:  # %bb.3:
2965; CSKY-NEXT:    .p2align 2
2966; CSKY-NEXT:  .LCPI101_0:
2967; CSKY-NEXT:    .long __atomic_compare_exchange_2
2968;
2969  %1 = atomicrmw umax i16* %a, i16 %b acquire
2970  ret i16 %1
2971}
2972
2973define i16 @atomicrmw_umax_i16_release(i16 *%a, i16 %b) nounwind {
2974; CSKY-LABEL: atomicrmw_umax_i16_release:
2975; CSKY:       # %bb.0:
2976; CSKY-NEXT:    subi16 sp, sp, 20
2977; CSKY-NEXT:    st16.w l3, (sp, 16)
2978; CSKY-NEXT:    st16.w l2, (sp, 12)
2979; CSKY-NEXT:    st16.w l1, (sp, 8)
2980; CSKY-NEXT:    st16.w l0, (sp, 4)
2981; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
2982; CSKY-NEXT:    subi16 sp, sp, 8
2983; CSKY-NEXT:    mov16 l0, a1
2984; CSKY-NEXT:    mov16 l1, a0
2985; CSKY-NEXT:    ld16.h a0, (a0, 0)
2986; CSKY-NEXT:    zexth16 l2, a1
2987; CSKY-NEXT:    movi16 l3, 0
2988; CSKY-NEXT:  .LBB102_1: # %atomicrmw.start
2989; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
2990; CSKY-NEXT:    zexth16 a1, a0
2991; CSKY-NEXT:    cmphs16 l2, a1
2992; CSKY-NEXT:    mov16 a2, l0
2993; CSKY-NEXT:    movf32 a2, a0
2994; CSKY-NEXT:    st32.h a0, (sp, 6)
2995; CSKY-NEXT:    st16.w l3, (sp, 0)
2996; CSKY-NEXT:    mov16 a0, l1
2997; CSKY-NEXT:    addi32 a1, sp, 6
2998; CSKY-NEXT:    movi16 a3, 3
2999; CSKY-NEXT:    jsri32 [.LCPI102_0]
3000; CSKY-NEXT:    mov16 a1, a0
3001; CSKY-NEXT:    ld32.h a0, (sp, 6)
3002; CSKY-NEXT:    bez32 a1, .LBB102_1
3003; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3004; CSKY-NEXT:    addi16 sp, sp, 8
3005; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3006; CSKY-NEXT:    ld16.w l0, (sp, 4)
3007; CSKY-NEXT:    ld16.w l1, (sp, 8)
3008; CSKY-NEXT:    ld16.w l2, (sp, 12)
3009; CSKY-NEXT:    ld16.w l3, (sp, 16)
3010; CSKY-NEXT:    addi16 sp, sp, 20
3011; CSKY-NEXT:    rts16
3012; CSKY-NEXT:    .p2align 1
3013; CSKY-NEXT:  # %bb.3:
3014; CSKY-NEXT:    .p2align 2
3015; CSKY-NEXT:  .LCPI102_0:
3016; CSKY-NEXT:    .long __atomic_compare_exchange_2
3017;
3018  %1 = atomicrmw umax i16* %a, i16 %b release
3019  ret i16 %1
3020}
3021
3022define i16 @atomicrmw_umax_i16_acq_rel(i16 *%a, i16 %b) nounwind {
3023; CSKY-LABEL: atomicrmw_umax_i16_acq_rel:
3024; CSKY:       # %bb.0:
3025; CSKY-NEXT:    subi16 sp, sp, 20
3026; CSKY-NEXT:    st16.w l3, (sp, 16)
3027; CSKY-NEXT:    st16.w l2, (sp, 12)
3028; CSKY-NEXT:    st16.w l1, (sp, 8)
3029; CSKY-NEXT:    st16.w l0, (sp, 4)
3030; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3031; CSKY-NEXT:    subi16 sp, sp, 8
3032; CSKY-NEXT:    mov16 l0, a1
3033; CSKY-NEXT:    mov16 l1, a0
3034; CSKY-NEXT:    ld16.h a0, (a0, 0)
3035; CSKY-NEXT:    zexth16 l2, a1
3036; CSKY-NEXT:    movi16 l3, 2
3037; CSKY-NEXT:  .LBB103_1: # %atomicrmw.start
3038; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3039; CSKY-NEXT:    zexth16 a1, a0
3040; CSKY-NEXT:    cmphs16 l2, a1
3041; CSKY-NEXT:    mov16 a2, l0
3042; CSKY-NEXT:    movf32 a2, a0
3043; CSKY-NEXT:    st32.h a0, (sp, 6)
3044; CSKY-NEXT:    st16.w l3, (sp, 0)
3045; CSKY-NEXT:    mov16 a0, l1
3046; CSKY-NEXT:    addi32 a1, sp, 6
3047; CSKY-NEXT:    movi16 a3, 4
3048; CSKY-NEXT:    jsri32 [.LCPI103_0]
3049; CSKY-NEXT:    mov16 a1, a0
3050; CSKY-NEXT:    ld32.h a0, (sp, 6)
3051; CSKY-NEXT:    bez32 a1, .LBB103_1
3052; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3053; CSKY-NEXT:    addi16 sp, sp, 8
3054; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3055; CSKY-NEXT:    ld16.w l0, (sp, 4)
3056; CSKY-NEXT:    ld16.w l1, (sp, 8)
3057; CSKY-NEXT:    ld16.w l2, (sp, 12)
3058; CSKY-NEXT:    ld16.w l3, (sp, 16)
3059; CSKY-NEXT:    addi16 sp, sp, 20
3060; CSKY-NEXT:    rts16
3061; CSKY-NEXT:    .p2align 1
3062; CSKY-NEXT:  # %bb.3:
3063; CSKY-NEXT:    .p2align 2
3064; CSKY-NEXT:  .LCPI103_0:
3065; CSKY-NEXT:    .long __atomic_compare_exchange_2
3066;
3067  %1 = atomicrmw umax i16* %a, i16 %b acq_rel
3068  ret i16 %1
3069}
3070
3071define i16 @atomicrmw_umax_i16_seq_cst(i16 *%a, i16 %b) nounwind {
3072; CSKY-LABEL: atomicrmw_umax_i16_seq_cst:
3073; CSKY:       # %bb.0:
3074; CSKY-NEXT:    subi16 sp, sp, 20
3075; CSKY-NEXT:    st16.w l3, (sp, 16)
3076; CSKY-NEXT:    st16.w l2, (sp, 12)
3077; CSKY-NEXT:    st16.w l1, (sp, 8)
3078; CSKY-NEXT:    st16.w l0, (sp, 4)
3079; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3080; CSKY-NEXT:    subi16 sp, sp, 8
3081; CSKY-NEXT:    mov16 l0, a1
3082; CSKY-NEXT:    mov16 l1, a0
3083; CSKY-NEXT:    ld16.h a0, (a0, 0)
3084; CSKY-NEXT:    zexth16 l2, a1
3085; CSKY-NEXT:    movi16 l3, 5
3086; CSKY-NEXT:  .LBB104_1: # %atomicrmw.start
3087; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3088; CSKY-NEXT:    zexth16 a1, a0
3089; CSKY-NEXT:    cmphs16 l2, a1
3090; CSKY-NEXT:    mov16 a2, l0
3091; CSKY-NEXT:    movf32 a2, a0
3092; CSKY-NEXT:    st32.h a0, (sp, 6)
3093; CSKY-NEXT:    st16.w l3, (sp, 0)
3094; CSKY-NEXT:    mov16 a0, l1
3095; CSKY-NEXT:    addi32 a1, sp, 6
3096; CSKY-NEXT:    movi16 a3, 5
3097; CSKY-NEXT:    jsri32 [.LCPI104_0]
3098; CSKY-NEXT:    mov16 a1, a0
3099; CSKY-NEXT:    ld32.h a0, (sp, 6)
3100; CSKY-NEXT:    bez32 a1, .LBB104_1
3101; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3102; CSKY-NEXT:    addi16 sp, sp, 8
3103; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3104; CSKY-NEXT:    ld16.w l0, (sp, 4)
3105; CSKY-NEXT:    ld16.w l1, (sp, 8)
3106; CSKY-NEXT:    ld16.w l2, (sp, 12)
3107; CSKY-NEXT:    ld16.w l3, (sp, 16)
3108; CSKY-NEXT:    addi16 sp, sp, 20
3109; CSKY-NEXT:    rts16
3110; CSKY-NEXT:    .p2align 1
3111; CSKY-NEXT:  # %bb.3:
3112; CSKY-NEXT:    .p2align 2
3113; CSKY-NEXT:  .LCPI104_0:
3114; CSKY-NEXT:    .long __atomic_compare_exchange_2
3115;
3116  %1 = atomicrmw umax i16* %a, i16 %b seq_cst
3117  ret i16 %1
3118}
3119
3120define i16 @atomicrmw_umin_i16_monotonic(i16 *%a, i16 %b) nounwind {
3121; CSKY-LABEL: atomicrmw_umin_i16_monotonic:
3122; CSKY:       # %bb.0:
3123; CSKY-NEXT:    subi16 sp, sp, 20
3124; CSKY-NEXT:    st16.w l3, (sp, 16)
3125; CSKY-NEXT:    st16.w l2, (sp, 12)
3126; CSKY-NEXT:    st16.w l1, (sp, 8)
3127; CSKY-NEXT:    st16.w l0, (sp, 4)
3128; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3129; CSKY-NEXT:    subi16 sp, sp, 8
3130; CSKY-NEXT:    mov16 l0, a1
3131; CSKY-NEXT:    mov16 l1, a0
3132; CSKY-NEXT:    ld16.h a0, (a0, 0)
3133; CSKY-NEXT:    zexth16 l2, a1
3134; CSKY-NEXT:    movi16 l3, 0
3135; CSKY-NEXT:  .LBB105_1: # %atomicrmw.start
3136; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3137; CSKY-NEXT:    zexth16 a1, a0
3138; CSKY-NEXT:    cmphs16 l2, a1
3139; CSKY-NEXT:    mov16 a2, l0
3140; CSKY-NEXT:    movt32 a2, a0
3141; CSKY-NEXT:    st32.h a0, (sp, 6)
3142; CSKY-NEXT:    st16.w l3, (sp, 0)
3143; CSKY-NEXT:    mov16 a0, l1
3144; CSKY-NEXT:    addi32 a1, sp, 6
3145; CSKY-NEXT:    movi16 a3, 0
3146; CSKY-NEXT:    jsri32 [.LCPI105_0]
3147; CSKY-NEXT:    mov16 a1, a0
3148; CSKY-NEXT:    ld32.h a0, (sp, 6)
3149; CSKY-NEXT:    bez32 a1, .LBB105_1
3150; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3151; CSKY-NEXT:    addi16 sp, sp, 8
3152; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3153; CSKY-NEXT:    ld16.w l0, (sp, 4)
3154; CSKY-NEXT:    ld16.w l1, (sp, 8)
3155; CSKY-NEXT:    ld16.w l2, (sp, 12)
3156; CSKY-NEXT:    ld16.w l3, (sp, 16)
3157; CSKY-NEXT:    addi16 sp, sp, 20
3158; CSKY-NEXT:    rts16
3159; CSKY-NEXT:    .p2align 1
3160; CSKY-NEXT:  # %bb.3:
3161; CSKY-NEXT:    .p2align 2
3162; CSKY-NEXT:  .LCPI105_0:
3163; CSKY-NEXT:    .long __atomic_compare_exchange_2
3164;
3165  %1 = atomicrmw umin i16* %a, i16 %b monotonic
3166  ret i16 %1
3167}
3168
3169define i16 @atomicrmw_umin_i16_acquire(i16 *%a, i16 %b) nounwind {
3170; CSKY-LABEL: atomicrmw_umin_i16_acquire:
3171; CSKY:       # %bb.0:
3172; CSKY-NEXT:    subi16 sp, sp, 20
3173; CSKY-NEXT:    st16.w l3, (sp, 16)
3174; CSKY-NEXT:    st16.w l2, (sp, 12)
3175; CSKY-NEXT:    st16.w l1, (sp, 8)
3176; CSKY-NEXT:    st16.w l0, (sp, 4)
3177; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3178; CSKY-NEXT:    subi16 sp, sp, 8
3179; CSKY-NEXT:    mov16 l0, a1
3180; CSKY-NEXT:    mov16 l1, a0
3181; CSKY-NEXT:    ld16.h a0, (a0, 0)
3182; CSKY-NEXT:    zexth16 l2, a1
3183; CSKY-NEXT:    movi16 l3, 2
3184; CSKY-NEXT:  .LBB106_1: # %atomicrmw.start
3185; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3186; CSKY-NEXT:    zexth16 a1, a0
3187; CSKY-NEXT:    cmphs16 l2, a1
3188; CSKY-NEXT:    mov16 a2, l0
3189; CSKY-NEXT:    movt32 a2, a0
3190; CSKY-NEXT:    st32.h a0, (sp, 6)
3191; CSKY-NEXT:    st16.w l3, (sp, 0)
3192; CSKY-NEXT:    mov16 a0, l1
3193; CSKY-NEXT:    addi32 a1, sp, 6
3194; CSKY-NEXT:    movi16 a3, 2
3195; CSKY-NEXT:    jsri32 [.LCPI106_0]
3196; CSKY-NEXT:    mov16 a1, a0
3197; CSKY-NEXT:    ld32.h a0, (sp, 6)
3198; CSKY-NEXT:    bez32 a1, .LBB106_1
3199; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3200; CSKY-NEXT:    addi16 sp, sp, 8
3201; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3202; CSKY-NEXT:    ld16.w l0, (sp, 4)
3203; CSKY-NEXT:    ld16.w l1, (sp, 8)
3204; CSKY-NEXT:    ld16.w l2, (sp, 12)
3205; CSKY-NEXT:    ld16.w l3, (sp, 16)
3206; CSKY-NEXT:    addi16 sp, sp, 20
3207; CSKY-NEXT:    rts16
3208; CSKY-NEXT:    .p2align 1
3209; CSKY-NEXT:  # %bb.3:
3210; CSKY-NEXT:    .p2align 2
3211; CSKY-NEXT:  .LCPI106_0:
3212; CSKY-NEXT:    .long __atomic_compare_exchange_2
3213;
3214  %1 = atomicrmw umin i16* %a, i16 %b acquire
3215  ret i16 %1
3216}
3217
3218define i16 @atomicrmw_umin_i16_release(i16 *%a, i16 %b) nounwind {
3219; CSKY-LABEL: atomicrmw_umin_i16_release:
3220; CSKY:       # %bb.0:
3221; CSKY-NEXT:    subi16 sp, sp, 20
3222; CSKY-NEXT:    st16.w l3, (sp, 16)
3223; CSKY-NEXT:    st16.w l2, (sp, 12)
3224; CSKY-NEXT:    st16.w l1, (sp, 8)
3225; CSKY-NEXT:    st16.w l0, (sp, 4)
3226; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3227; CSKY-NEXT:    subi16 sp, sp, 8
3228; CSKY-NEXT:    mov16 l0, a1
3229; CSKY-NEXT:    mov16 l1, a0
3230; CSKY-NEXT:    ld16.h a0, (a0, 0)
3231; CSKY-NEXT:    zexth16 l2, a1
3232; CSKY-NEXT:    movi16 l3, 0
3233; CSKY-NEXT:  .LBB107_1: # %atomicrmw.start
3234; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3235; CSKY-NEXT:    zexth16 a1, a0
3236; CSKY-NEXT:    cmphs16 l2, a1
3237; CSKY-NEXT:    mov16 a2, l0
3238; CSKY-NEXT:    movt32 a2, a0
3239; CSKY-NEXT:    st32.h a0, (sp, 6)
3240; CSKY-NEXT:    st16.w l3, (sp, 0)
3241; CSKY-NEXT:    mov16 a0, l1
3242; CSKY-NEXT:    addi32 a1, sp, 6
3243; CSKY-NEXT:    movi16 a3, 3
3244; CSKY-NEXT:    jsri32 [.LCPI107_0]
3245; CSKY-NEXT:    mov16 a1, a0
3246; CSKY-NEXT:    ld32.h a0, (sp, 6)
3247; CSKY-NEXT:    bez32 a1, .LBB107_1
3248; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3249; CSKY-NEXT:    addi16 sp, sp, 8
3250; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3251; CSKY-NEXT:    ld16.w l0, (sp, 4)
3252; CSKY-NEXT:    ld16.w l1, (sp, 8)
3253; CSKY-NEXT:    ld16.w l2, (sp, 12)
3254; CSKY-NEXT:    ld16.w l3, (sp, 16)
3255; CSKY-NEXT:    addi16 sp, sp, 20
3256; CSKY-NEXT:    rts16
3257; CSKY-NEXT:    .p2align 1
3258; CSKY-NEXT:  # %bb.3:
3259; CSKY-NEXT:    .p2align 2
3260; CSKY-NEXT:  .LCPI107_0:
3261; CSKY-NEXT:    .long __atomic_compare_exchange_2
3262;
3263  %1 = atomicrmw umin i16* %a, i16 %b release
3264  ret i16 %1
3265}
3266
3267define i16 @atomicrmw_umin_i16_acq_rel(i16 *%a, i16 %b) nounwind {
3268; CSKY-LABEL: atomicrmw_umin_i16_acq_rel:
3269; CSKY:       # %bb.0:
3270; CSKY-NEXT:    subi16 sp, sp, 20
3271; CSKY-NEXT:    st16.w l3, (sp, 16)
3272; CSKY-NEXT:    st16.w l2, (sp, 12)
3273; CSKY-NEXT:    st16.w l1, (sp, 8)
3274; CSKY-NEXT:    st16.w l0, (sp, 4)
3275; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3276; CSKY-NEXT:    subi16 sp, sp, 8
3277; CSKY-NEXT:    mov16 l0, a1
3278; CSKY-NEXT:    mov16 l1, a0
3279; CSKY-NEXT:    ld16.h a0, (a0, 0)
3280; CSKY-NEXT:    zexth16 l2, a1
3281; CSKY-NEXT:    movi16 l3, 2
3282; CSKY-NEXT:  .LBB108_1: # %atomicrmw.start
3283; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3284; CSKY-NEXT:    zexth16 a1, a0
3285; CSKY-NEXT:    cmphs16 l2, a1
3286; CSKY-NEXT:    mov16 a2, l0
3287; CSKY-NEXT:    movt32 a2, a0
3288; CSKY-NEXT:    st32.h a0, (sp, 6)
3289; CSKY-NEXT:    st16.w l3, (sp, 0)
3290; CSKY-NEXT:    mov16 a0, l1
3291; CSKY-NEXT:    addi32 a1, sp, 6
3292; CSKY-NEXT:    movi16 a3, 4
3293; CSKY-NEXT:    jsri32 [.LCPI108_0]
3294; CSKY-NEXT:    mov16 a1, a0
3295; CSKY-NEXT:    ld32.h a0, (sp, 6)
3296; CSKY-NEXT:    bez32 a1, .LBB108_1
3297; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3298; CSKY-NEXT:    addi16 sp, sp, 8
3299; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3300; CSKY-NEXT:    ld16.w l0, (sp, 4)
3301; CSKY-NEXT:    ld16.w l1, (sp, 8)
3302; CSKY-NEXT:    ld16.w l2, (sp, 12)
3303; CSKY-NEXT:    ld16.w l3, (sp, 16)
3304; CSKY-NEXT:    addi16 sp, sp, 20
3305; CSKY-NEXT:    rts16
3306; CSKY-NEXT:    .p2align 1
3307; CSKY-NEXT:  # %bb.3:
3308; CSKY-NEXT:    .p2align 2
3309; CSKY-NEXT:  .LCPI108_0:
3310; CSKY-NEXT:    .long __atomic_compare_exchange_2
3311;
3312  %1 = atomicrmw umin i16* %a, i16 %b acq_rel
3313  ret i16 %1
3314}
3315
3316define i16 @atomicrmw_umin_i16_seq_cst(i16 *%a, i16 %b) nounwind {
3317; CSKY-LABEL: atomicrmw_umin_i16_seq_cst:
3318; CSKY:       # %bb.0:
3319; CSKY-NEXT:    subi16 sp, sp, 20
3320; CSKY-NEXT:    st16.w l3, (sp, 16)
3321; CSKY-NEXT:    st16.w l2, (sp, 12)
3322; CSKY-NEXT:    st16.w l1, (sp, 8)
3323; CSKY-NEXT:    st16.w l0, (sp, 4)
3324; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3325; CSKY-NEXT:    subi16 sp, sp, 8
3326; CSKY-NEXT:    mov16 l0, a1
3327; CSKY-NEXT:    mov16 l1, a0
3328; CSKY-NEXT:    ld16.h a0, (a0, 0)
3329; CSKY-NEXT:    zexth16 l2, a1
3330; CSKY-NEXT:    movi16 l3, 5
3331; CSKY-NEXT:  .LBB109_1: # %atomicrmw.start
3332; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
3333; CSKY-NEXT:    zexth16 a1, a0
3334; CSKY-NEXT:    cmphs16 l2, a1
3335; CSKY-NEXT:    mov16 a2, l0
3336; CSKY-NEXT:    movt32 a2, a0
3337; CSKY-NEXT:    st32.h a0, (sp, 6)
3338; CSKY-NEXT:    st16.w l3, (sp, 0)
3339; CSKY-NEXT:    mov16 a0, l1
3340; CSKY-NEXT:    addi32 a1, sp, 6
3341; CSKY-NEXT:    movi16 a3, 5
3342; CSKY-NEXT:    jsri32 [.LCPI109_0]
3343; CSKY-NEXT:    mov16 a1, a0
3344; CSKY-NEXT:    ld32.h a0, (sp, 6)
3345; CSKY-NEXT:    bez32 a1, .LBB109_1
3346; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
3347; CSKY-NEXT:    addi16 sp, sp, 8
3348; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3349; CSKY-NEXT:    ld16.w l0, (sp, 4)
3350; CSKY-NEXT:    ld16.w l1, (sp, 8)
3351; CSKY-NEXT:    ld16.w l2, (sp, 12)
3352; CSKY-NEXT:    ld16.w l3, (sp, 16)
3353; CSKY-NEXT:    addi16 sp, sp, 20
3354; CSKY-NEXT:    rts16
3355; CSKY-NEXT:    .p2align 1
3356; CSKY-NEXT:  # %bb.3:
3357; CSKY-NEXT:    .p2align 2
3358; CSKY-NEXT:  .LCPI109_0:
3359; CSKY-NEXT:    .long __atomic_compare_exchange_2
3360;
3361  %1 = atomicrmw umin i16* %a, i16 %b seq_cst
3362  ret i16 %1
3363}
3364
3365define i32 @atomicrmw_xchg_i32_monotonic(i32* %a, i32 %b) nounwind {
3366; CSKY-LABEL: atomicrmw_xchg_i32_monotonic:
3367; CSKY:       # %bb.0:
3368; CSKY-NEXT:    subi16 sp, sp, 4
3369; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3370; CSKY-NEXT:    movi16 a2, 0
3371; CSKY-NEXT:    jsri32 [.LCPI110_0]
3372; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3373; CSKY-NEXT:    addi16 sp, sp, 4
3374; CSKY-NEXT:    rts16
3375; CSKY-NEXT:    .p2align 1
3376; CSKY-NEXT:  # %bb.1:
3377; CSKY-NEXT:    .p2align 2
3378; CSKY-NEXT:  .LCPI110_0:
3379; CSKY-NEXT:    .long __atomic_exchange_4
3380;
3381  %1 = atomicrmw xchg i32* %a, i32 %b monotonic
3382  ret i32 %1
3383}
3384
3385define i32 @atomicrmw_xchg_i32_acquire(i32* %a, i32 %b) nounwind {
3386; CSKY-LABEL: atomicrmw_xchg_i32_acquire:
3387; CSKY:       # %bb.0:
3388; CSKY-NEXT:    subi16 sp, sp, 4
3389; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3390; CSKY-NEXT:    movi16 a2, 2
3391; CSKY-NEXT:    jsri32 [.LCPI111_0]
3392; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3393; CSKY-NEXT:    addi16 sp, sp, 4
3394; CSKY-NEXT:    rts16
3395; CSKY-NEXT:    .p2align 1
3396; CSKY-NEXT:  # %bb.1:
3397; CSKY-NEXT:    .p2align 2
3398; CSKY-NEXT:  .LCPI111_0:
3399; CSKY-NEXT:    .long __atomic_exchange_4
3400;
3401  %1 = atomicrmw xchg i32* %a, i32 %b acquire
3402  ret i32 %1
3403}
3404
3405define i32 @atomicrmw_xchg_i32_release(i32* %a, i32 %b) nounwind {
3406; CSKY-LABEL: atomicrmw_xchg_i32_release:
3407; CSKY:       # %bb.0:
3408; CSKY-NEXT:    subi16 sp, sp, 4
3409; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3410; CSKY-NEXT:    movi16 a2, 3
3411; CSKY-NEXT:    jsri32 [.LCPI112_0]
3412; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3413; CSKY-NEXT:    addi16 sp, sp, 4
3414; CSKY-NEXT:    rts16
3415; CSKY-NEXT:    .p2align 1
3416; CSKY-NEXT:  # %bb.1:
3417; CSKY-NEXT:    .p2align 2
3418; CSKY-NEXT:  .LCPI112_0:
3419; CSKY-NEXT:    .long __atomic_exchange_4
3420;
3421  %1 = atomicrmw xchg i32* %a, i32 %b release
3422  ret i32 %1
3423}
3424
3425define i32 @atomicrmw_xchg_i32_acq_rel(i32* %a, i32 %b) nounwind {
3426; CSKY-LABEL: atomicrmw_xchg_i32_acq_rel:
3427; CSKY:       # %bb.0:
3428; CSKY-NEXT:    subi16 sp, sp, 4
3429; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3430; CSKY-NEXT:    movi16 a2, 4
3431; CSKY-NEXT:    jsri32 [.LCPI113_0]
3432; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3433; CSKY-NEXT:    addi16 sp, sp, 4
3434; CSKY-NEXT:    rts16
3435; CSKY-NEXT:    .p2align 1
3436; CSKY-NEXT:  # %bb.1:
3437; CSKY-NEXT:    .p2align 2
3438; CSKY-NEXT:  .LCPI113_0:
3439; CSKY-NEXT:    .long __atomic_exchange_4
3440;
3441  %1 = atomicrmw xchg i32* %a, i32 %b acq_rel
3442  ret i32 %1
3443}
3444
3445define i32 @atomicrmw_xchg_i32_seq_cst(i32* %a, i32 %b) nounwind {
3446; CSKY-LABEL: atomicrmw_xchg_i32_seq_cst:
3447; CSKY:       # %bb.0:
3448; CSKY-NEXT:    subi16 sp, sp, 4
3449; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3450; CSKY-NEXT:    movi16 a2, 5
3451; CSKY-NEXT:    jsri32 [.LCPI114_0]
3452; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3453; CSKY-NEXT:    addi16 sp, sp, 4
3454; CSKY-NEXT:    rts16
3455; CSKY-NEXT:    .p2align 1
3456; CSKY-NEXT:  # %bb.1:
3457; CSKY-NEXT:    .p2align 2
3458; CSKY-NEXT:  .LCPI114_0:
3459; CSKY-NEXT:    .long __atomic_exchange_4
3460;
3461  %1 = atomicrmw xchg i32* %a, i32 %b seq_cst
3462  ret i32 %1
3463}
3464
3465define i32 @atomicrmw_add_i32_monotonic(i32 *%a, i32 %b) nounwind {
3466; CSKY-LABEL: atomicrmw_add_i32_monotonic:
3467; CSKY:       # %bb.0:
3468; CSKY-NEXT:    subi16 sp, sp, 4
3469; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3470; CSKY-NEXT:    movi16 a2, 0
3471; CSKY-NEXT:    jsri32 [.LCPI115_0]
3472; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3473; CSKY-NEXT:    addi16 sp, sp, 4
3474; CSKY-NEXT:    rts16
3475; CSKY-NEXT:    .p2align 1
3476; CSKY-NEXT:  # %bb.1:
3477; CSKY-NEXT:    .p2align 2
3478; CSKY-NEXT:  .LCPI115_0:
3479; CSKY-NEXT:    .long __atomic_fetch_add_4
3480;
3481  %1 = atomicrmw add i32* %a, i32 %b monotonic
3482  ret i32 %1
3483}
3484
3485define i32 @atomicrmw_add_i32_acquire(i32 *%a, i32 %b) nounwind {
3486; CSKY-LABEL: atomicrmw_add_i32_acquire:
3487; CSKY:       # %bb.0:
3488; CSKY-NEXT:    subi16 sp, sp, 4
3489; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3490; CSKY-NEXT:    movi16 a2, 2
3491; CSKY-NEXT:    jsri32 [.LCPI116_0]
3492; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3493; CSKY-NEXT:    addi16 sp, sp, 4
3494; CSKY-NEXT:    rts16
3495; CSKY-NEXT:    .p2align 1
3496; CSKY-NEXT:  # %bb.1:
3497; CSKY-NEXT:    .p2align 2
3498; CSKY-NEXT:  .LCPI116_0:
3499; CSKY-NEXT:    .long __atomic_fetch_add_4
3500;
3501  %1 = atomicrmw add i32* %a, i32 %b acquire
3502  ret i32 %1
3503}
3504
3505define i32 @atomicrmw_add_i32_release(i32 *%a, i32 %b) nounwind {
3506; CSKY-LABEL: atomicrmw_add_i32_release:
3507; CSKY:       # %bb.0:
3508; CSKY-NEXT:    subi16 sp, sp, 4
3509; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3510; CSKY-NEXT:    movi16 a2, 3
3511; CSKY-NEXT:    jsri32 [.LCPI117_0]
3512; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3513; CSKY-NEXT:    addi16 sp, sp, 4
3514; CSKY-NEXT:    rts16
3515; CSKY-NEXT:    .p2align 1
3516; CSKY-NEXT:  # %bb.1:
3517; CSKY-NEXT:    .p2align 2
3518; CSKY-NEXT:  .LCPI117_0:
3519; CSKY-NEXT:    .long __atomic_fetch_add_4
3520;
3521  %1 = atomicrmw add i32* %a, i32 %b release
3522  ret i32 %1
3523}
3524
3525define i32 @atomicrmw_add_i32_acq_rel(i32 *%a, i32 %b) nounwind {
3526; CSKY-LABEL: atomicrmw_add_i32_acq_rel:
3527; CSKY:       # %bb.0:
3528; CSKY-NEXT:    subi16 sp, sp, 4
3529; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3530; CSKY-NEXT:    movi16 a2, 4
3531; CSKY-NEXT:    jsri32 [.LCPI118_0]
3532; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3533; CSKY-NEXT:    addi16 sp, sp, 4
3534; CSKY-NEXT:    rts16
3535; CSKY-NEXT:    .p2align 1
3536; CSKY-NEXT:  # %bb.1:
3537; CSKY-NEXT:    .p2align 2
3538; CSKY-NEXT:  .LCPI118_0:
3539; CSKY-NEXT:    .long __atomic_fetch_add_4
3540;
3541  %1 = atomicrmw add i32* %a, i32 %b acq_rel
3542  ret i32 %1
3543}
3544
3545define i32 @atomicrmw_add_i32_seq_cst(i32 *%a, i32 %b) nounwind {
3546; CSKY-LABEL: atomicrmw_add_i32_seq_cst:
3547; CSKY:       # %bb.0:
3548; CSKY-NEXT:    subi16 sp, sp, 4
3549; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3550; CSKY-NEXT:    movi16 a2, 5
3551; CSKY-NEXT:    jsri32 [.LCPI119_0]
3552; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3553; CSKY-NEXT:    addi16 sp, sp, 4
3554; CSKY-NEXT:    rts16
3555; CSKY-NEXT:    .p2align 1
3556; CSKY-NEXT:  # %bb.1:
3557; CSKY-NEXT:    .p2align 2
3558; CSKY-NEXT:  .LCPI119_0:
3559; CSKY-NEXT:    .long __atomic_fetch_add_4
3560;
3561  %1 = atomicrmw add i32* %a, i32 %b seq_cst
3562  ret i32 %1
3563}
3564
3565define i32 @atomicrmw_sub_i32_monotonic(i32* %a, i32 %b) nounwind {
3566; CSKY-LABEL: atomicrmw_sub_i32_monotonic:
3567; CSKY:       # %bb.0:
3568; CSKY-NEXT:    subi16 sp, sp, 4
3569; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3570; CSKY-NEXT:    movi16 a2, 0
3571; CSKY-NEXT:    jsri32 [.LCPI120_0]
3572; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3573; CSKY-NEXT:    addi16 sp, sp, 4
3574; CSKY-NEXT:    rts16
3575; CSKY-NEXT:    .p2align 1
3576; CSKY-NEXT:  # %bb.1:
3577; CSKY-NEXT:    .p2align 2
3578; CSKY-NEXT:  .LCPI120_0:
3579; CSKY-NEXT:    .long __atomic_fetch_sub_4
3580;
3581  %1 = atomicrmw sub i32* %a, i32 %b monotonic
3582  ret i32 %1
3583}
3584
3585define i32 @atomicrmw_sub_i32_acquire(i32* %a, i32 %b) nounwind {
3586; CSKY-LABEL: atomicrmw_sub_i32_acquire:
3587; CSKY:       # %bb.0:
3588; CSKY-NEXT:    subi16 sp, sp, 4
3589; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3590; CSKY-NEXT:    movi16 a2, 2
3591; CSKY-NEXT:    jsri32 [.LCPI121_0]
3592; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3593; CSKY-NEXT:    addi16 sp, sp, 4
3594; CSKY-NEXT:    rts16
3595; CSKY-NEXT:    .p2align 1
3596; CSKY-NEXT:  # %bb.1:
3597; CSKY-NEXT:    .p2align 2
3598; CSKY-NEXT:  .LCPI121_0:
3599; CSKY-NEXT:    .long __atomic_fetch_sub_4
3600;
3601  %1 = atomicrmw sub i32* %a, i32 %b acquire
3602  ret i32 %1
3603}
3604
3605define i32 @atomicrmw_sub_i32_release(i32* %a, i32 %b) nounwind {
3606; CSKY-LABEL: atomicrmw_sub_i32_release:
3607; CSKY:       # %bb.0:
3608; CSKY-NEXT:    subi16 sp, sp, 4
3609; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3610; CSKY-NEXT:    movi16 a2, 3
3611; CSKY-NEXT:    jsri32 [.LCPI122_0]
3612; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3613; CSKY-NEXT:    addi16 sp, sp, 4
3614; CSKY-NEXT:    rts16
3615; CSKY-NEXT:    .p2align 1
3616; CSKY-NEXT:  # %bb.1:
3617; CSKY-NEXT:    .p2align 2
3618; CSKY-NEXT:  .LCPI122_0:
3619; CSKY-NEXT:    .long __atomic_fetch_sub_4
3620;
3621  %1 = atomicrmw sub i32* %a, i32 %b release
3622  ret i32 %1
3623}
3624
3625define i32 @atomicrmw_sub_i32_acq_rel(i32* %a, i32 %b) nounwind {
3626; CSKY-LABEL: atomicrmw_sub_i32_acq_rel:
3627; CSKY:       # %bb.0:
3628; CSKY-NEXT:    subi16 sp, sp, 4
3629; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3630; CSKY-NEXT:    movi16 a2, 4
3631; CSKY-NEXT:    jsri32 [.LCPI123_0]
3632; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3633; CSKY-NEXT:    addi16 sp, sp, 4
3634; CSKY-NEXT:    rts16
3635; CSKY-NEXT:    .p2align 1
3636; CSKY-NEXT:  # %bb.1:
3637; CSKY-NEXT:    .p2align 2
3638; CSKY-NEXT:  .LCPI123_0:
3639; CSKY-NEXT:    .long __atomic_fetch_sub_4
3640;
3641  %1 = atomicrmw sub i32* %a, i32 %b acq_rel
3642  ret i32 %1
3643}
3644
3645define i32 @atomicrmw_sub_i32_seq_cst(i32* %a, i32 %b) nounwind {
3646; CSKY-LABEL: atomicrmw_sub_i32_seq_cst:
3647; CSKY:       # %bb.0:
3648; CSKY-NEXT:    subi16 sp, sp, 4
3649; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3650; CSKY-NEXT:    movi16 a2, 5
3651; CSKY-NEXT:    jsri32 [.LCPI124_0]
3652; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3653; CSKY-NEXT:    addi16 sp, sp, 4
3654; CSKY-NEXT:    rts16
3655; CSKY-NEXT:    .p2align 1
3656; CSKY-NEXT:  # %bb.1:
3657; CSKY-NEXT:    .p2align 2
3658; CSKY-NEXT:  .LCPI124_0:
3659; CSKY-NEXT:    .long __atomic_fetch_sub_4
3660;
3661  %1 = atomicrmw sub i32* %a, i32 %b seq_cst
3662  ret i32 %1
3663}
3664
3665define i32 @atomicrmw_and_i32_monotonic(i32 *%a, i32 %b) nounwind {
3666; CSKY-LABEL: atomicrmw_and_i32_monotonic:
3667; CSKY:       # %bb.0:
3668; CSKY-NEXT:    subi16 sp, sp, 4
3669; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3670; CSKY-NEXT:    movi16 a2, 0
3671; CSKY-NEXT:    jsri32 [.LCPI125_0]
3672; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3673; CSKY-NEXT:    addi16 sp, sp, 4
3674; CSKY-NEXT:    rts16
3675; CSKY-NEXT:    .p2align 1
3676; CSKY-NEXT:  # %bb.1:
3677; CSKY-NEXT:    .p2align 2
3678; CSKY-NEXT:  .LCPI125_0:
3679; CSKY-NEXT:    .long __atomic_fetch_and_4
3680;
3681  %1 = atomicrmw and i32* %a, i32 %b monotonic
3682  ret i32 %1
3683}
3684
3685define i32 @atomicrmw_and_i32_acquire(i32 *%a, i32 %b) nounwind {
3686; CSKY-LABEL: atomicrmw_and_i32_acquire:
3687; CSKY:       # %bb.0:
3688; CSKY-NEXT:    subi16 sp, sp, 4
3689; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3690; CSKY-NEXT:    movi16 a2, 2
3691; CSKY-NEXT:    jsri32 [.LCPI126_0]
3692; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3693; CSKY-NEXT:    addi16 sp, sp, 4
3694; CSKY-NEXT:    rts16
3695; CSKY-NEXT:    .p2align 1
3696; CSKY-NEXT:  # %bb.1:
3697; CSKY-NEXT:    .p2align 2
3698; CSKY-NEXT:  .LCPI126_0:
3699; CSKY-NEXT:    .long __atomic_fetch_and_4
3700;
3701  %1 = atomicrmw and i32* %a, i32 %b acquire
3702  ret i32 %1
3703}
3704
3705define i32 @atomicrmw_and_i32_release(i32 *%a, i32 %b) nounwind {
3706; CSKY-LABEL: atomicrmw_and_i32_release:
3707; CSKY:       # %bb.0:
3708; CSKY-NEXT:    subi16 sp, sp, 4
3709; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3710; CSKY-NEXT:    movi16 a2, 3
3711; CSKY-NEXT:    jsri32 [.LCPI127_0]
3712; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3713; CSKY-NEXT:    addi16 sp, sp, 4
3714; CSKY-NEXT:    rts16
3715; CSKY-NEXT:    .p2align 1
3716; CSKY-NEXT:  # %bb.1:
3717; CSKY-NEXT:    .p2align 2
3718; CSKY-NEXT:  .LCPI127_0:
3719; CSKY-NEXT:    .long __atomic_fetch_and_4
3720;
3721  %1 = atomicrmw and i32* %a, i32 %b release
3722  ret i32 %1
3723}
3724
3725define i32 @atomicrmw_and_i32_acq_rel(i32 *%a, i32 %b) nounwind {
3726; CSKY-LABEL: atomicrmw_and_i32_acq_rel:
3727; CSKY:       # %bb.0:
3728; CSKY-NEXT:    subi16 sp, sp, 4
3729; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3730; CSKY-NEXT:    movi16 a2, 4
3731; CSKY-NEXT:    jsri32 [.LCPI128_0]
3732; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3733; CSKY-NEXT:    addi16 sp, sp, 4
3734; CSKY-NEXT:    rts16
3735; CSKY-NEXT:    .p2align 1
3736; CSKY-NEXT:  # %bb.1:
3737; CSKY-NEXT:    .p2align 2
3738; CSKY-NEXT:  .LCPI128_0:
3739; CSKY-NEXT:    .long __atomic_fetch_and_4
3740;
3741  %1 = atomicrmw and i32* %a, i32 %b acq_rel
3742  ret i32 %1
3743}
3744
3745define i32 @atomicrmw_and_i32_seq_cst(i32 *%a, i32 %b) nounwind {
3746; CSKY-LABEL: atomicrmw_and_i32_seq_cst:
3747; CSKY:       # %bb.0:
3748; CSKY-NEXT:    subi16 sp, sp, 4
3749; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3750; CSKY-NEXT:    movi16 a2, 5
3751; CSKY-NEXT:    jsri32 [.LCPI129_0]
3752; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3753; CSKY-NEXT:    addi16 sp, sp, 4
3754; CSKY-NEXT:    rts16
3755; CSKY-NEXT:    .p2align 1
3756; CSKY-NEXT:  # %bb.1:
3757; CSKY-NEXT:    .p2align 2
3758; CSKY-NEXT:  .LCPI129_0:
3759; CSKY-NEXT:    .long __atomic_fetch_and_4
3760;
3761  %1 = atomicrmw and i32* %a, i32 %b seq_cst
3762  ret i32 %1
3763}
3764
3765define i32 @atomicrmw_nand_i32_monotonic(i32* %a, i32 %b) nounwind {
3766; CSKY-LABEL: atomicrmw_nand_i32_monotonic:
3767; CSKY:       # %bb.0:
3768; CSKY-NEXT:    subi16 sp, sp, 4
3769; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3770; CSKY-NEXT:    movi16 a2, 0
3771; CSKY-NEXT:    jsri32 [.LCPI130_0]
3772; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3773; CSKY-NEXT:    addi16 sp, sp, 4
3774; CSKY-NEXT:    rts16
3775; CSKY-NEXT:    .p2align 1
3776; CSKY-NEXT:  # %bb.1:
3777; CSKY-NEXT:    .p2align 2
3778; CSKY-NEXT:  .LCPI130_0:
3779; CSKY-NEXT:    .long __atomic_fetch_nand_4
3780;
3781  %1 = atomicrmw nand i32* %a, i32 %b monotonic
3782  ret i32 %1
3783}
3784
3785define i32 @atomicrmw_nand_i32_acquire(i32* %a, i32 %b) nounwind {
3786; CSKY-LABEL: atomicrmw_nand_i32_acquire:
3787; CSKY:       # %bb.0:
3788; CSKY-NEXT:    subi16 sp, sp, 4
3789; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3790; CSKY-NEXT:    movi16 a2, 2
3791; CSKY-NEXT:    jsri32 [.LCPI131_0]
3792; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3793; CSKY-NEXT:    addi16 sp, sp, 4
3794; CSKY-NEXT:    rts16
3795; CSKY-NEXT:    .p2align 1
3796; CSKY-NEXT:  # %bb.1:
3797; CSKY-NEXT:    .p2align 2
3798; CSKY-NEXT:  .LCPI131_0:
3799; CSKY-NEXT:    .long __atomic_fetch_nand_4
3800;
3801  %1 = atomicrmw nand i32* %a, i32 %b acquire
3802  ret i32 %1
3803}
3804
3805define i32 @atomicrmw_nand_i32_release(i32* %a, i32 %b) nounwind {
3806; CSKY-LABEL: atomicrmw_nand_i32_release:
3807; CSKY:       # %bb.0:
3808; CSKY-NEXT:    subi16 sp, sp, 4
3809; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3810; CSKY-NEXT:    movi16 a2, 3
3811; CSKY-NEXT:    jsri32 [.LCPI132_0]
3812; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3813; CSKY-NEXT:    addi16 sp, sp, 4
3814; CSKY-NEXT:    rts16
3815; CSKY-NEXT:    .p2align 1
3816; CSKY-NEXT:  # %bb.1:
3817; CSKY-NEXT:    .p2align 2
3818; CSKY-NEXT:  .LCPI132_0:
3819; CSKY-NEXT:    .long __atomic_fetch_nand_4
3820;
3821  %1 = atomicrmw nand i32* %a, i32 %b release
3822  ret i32 %1
3823}
3824
3825define i32 @atomicrmw_nand_i32_acq_rel(i32* %a, i32 %b) nounwind {
3826; CSKY-LABEL: atomicrmw_nand_i32_acq_rel:
3827; CSKY:       # %bb.0:
3828; CSKY-NEXT:    subi16 sp, sp, 4
3829; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3830; CSKY-NEXT:    movi16 a2, 4
3831; CSKY-NEXT:    jsri32 [.LCPI133_0]
3832; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3833; CSKY-NEXT:    addi16 sp, sp, 4
3834; CSKY-NEXT:    rts16
3835; CSKY-NEXT:    .p2align 1
3836; CSKY-NEXT:  # %bb.1:
3837; CSKY-NEXT:    .p2align 2
3838; CSKY-NEXT:  .LCPI133_0:
3839; CSKY-NEXT:    .long __atomic_fetch_nand_4
3840;
3841  %1 = atomicrmw nand i32* %a, i32 %b acq_rel
3842  ret i32 %1
3843}
3844
3845define i32 @atomicrmw_nand_i32_seq_cst(i32* %a, i32 %b) nounwind {
3846; CSKY-LABEL: atomicrmw_nand_i32_seq_cst:
3847; CSKY:       # %bb.0:
3848; CSKY-NEXT:    subi16 sp, sp, 4
3849; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3850; CSKY-NEXT:    movi16 a2, 5
3851; CSKY-NEXT:    jsri32 [.LCPI134_0]
3852; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3853; CSKY-NEXT:    addi16 sp, sp, 4
3854; CSKY-NEXT:    rts16
3855; CSKY-NEXT:    .p2align 1
3856; CSKY-NEXT:  # %bb.1:
3857; CSKY-NEXT:    .p2align 2
3858; CSKY-NEXT:  .LCPI134_0:
3859; CSKY-NEXT:    .long __atomic_fetch_nand_4
3860;
3861  %1 = atomicrmw nand i32* %a, i32 %b seq_cst
3862  ret i32 %1
3863}
3864
3865define i32 @atomicrmw_or_i32_monotonic(i32 *%a, i32 %b) nounwind {
3866; CSKY-LABEL: atomicrmw_or_i32_monotonic:
3867; CSKY:       # %bb.0:
3868; CSKY-NEXT:    subi16 sp, sp, 4
3869; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3870; CSKY-NEXT:    movi16 a2, 0
3871; CSKY-NEXT:    jsri32 [.LCPI135_0]
3872; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3873; CSKY-NEXT:    addi16 sp, sp, 4
3874; CSKY-NEXT:    rts16
3875; CSKY-NEXT:    .p2align 1
3876; CSKY-NEXT:  # %bb.1:
3877; CSKY-NEXT:    .p2align 2
3878; CSKY-NEXT:  .LCPI135_0:
3879; CSKY-NEXT:    .long __atomic_fetch_or_4
3880;
3881  %1 = atomicrmw or i32* %a, i32 %b monotonic
3882  ret i32 %1
3883}
3884
3885define i32 @atomicrmw_or_i32_acquire(i32 *%a, i32 %b) nounwind {
3886; CSKY-LABEL: atomicrmw_or_i32_acquire:
3887; CSKY:       # %bb.0:
3888; CSKY-NEXT:    subi16 sp, sp, 4
3889; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3890; CSKY-NEXT:    movi16 a2, 2
3891; CSKY-NEXT:    jsri32 [.LCPI136_0]
3892; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3893; CSKY-NEXT:    addi16 sp, sp, 4
3894; CSKY-NEXT:    rts16
3895; CSKY-NEXT:    .p2align 1
3896; CSKY-NEXT:  # %bb.1:
3897; CSKY-NEXT:    .p2align 2
3898; CSKY-NEXT:  .LCPI136_0:
3899; CSKY-NEXT:    .long __atomic_fetch_or_4
3900;
3901  %1 = atomicrmw or i32* %a, i32 %b acquire
3902  ret i32 %1
3903}
3904
3905define i32 @atomicrmw_or_i32_release(i32 *%a, i32 %b) nounwind {
3906; CSKY-LABEL: atomicrmw_or_i32_release:
3907; CSKY:       # %bb.0:
3908; CSKY-NEXT:    subi16 sp, sp, 4
3909; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3910; CSKY-NEXT:    movi16 a2, 3
3911; CSKY-NEXT:    jsri32 [.LCPI137_0]
3912; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3913; CSKY-NEXT:    addi16 sp, sp, 4
3914; CSKY-NEXT:    rts16
3915; CSKY-NEXT:    .p2align 1
3916; CSKY-NEXT:  # %bb.1:
3917; CSKY-NEXT:    .p2align 2
3918; CSKY-NEXT:  .LCPI137_0:
3919; CSKY-NEXT:    .long __atomic_fetch_or_4
3920;
3921  %1 = atomicrmw or i32* %a, i32 %b release
3922  ret i32 %1
3923}
3924
3925define i32 @atomicrmw_or_i32_acq_rel(i32 *%a, i32 %b) nounwind {
3926; CSKY-LABEL: atomicrmw_or_i32_acq_rel:
3927; CSKY:       # %bb.0:
3928; CSKY-NEXT:    subi16 sp, sp, 4
3929; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3930; CSKY-NEXT:    movi16 a2, 4
3931; CSKY-NEXT:    jsri32 [.LCPI138_0]
3932; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3933; CSKY-NEXT:    addi16 sp, sp, 4
3934; CSKY-NEXT:    rts16
3935; CSKY-NEXT:    .p2align 1
3936; CSKY-NEXT:  # %bb.1:
3937; CSKY-NEXT:    .p2align 2
3938; CSKY-NEXT:  .LCPI138_0:
3939; CSKY-NEXT:    .long __atomic_fetch_or_4
3940;
3941  %1 = atomicrmw or i32* %a, i32 %b acq_rel
3942  ret i32 %1
3943}
3944
3945define i32 @atomicrmw_or_i32_seq_cst(i32 *%a, i32 %b) nounwind {
3946; CSKY-LABEL: atomicrmw_or_i32_seq_cst:
3947; CSKY:       # %bb.0:
3948; CSKY-NEXT:    subi16 sp, sp, 4
3949; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3950; CSKY-NEXT:    movi16 a2, 5
3951; CSKY-NEXT:    jsri32 [.LCPI139_0]
3952; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3953; CSKY-NEXT:    addi16 sp, sp, 4
3954; CSKY-NEXT:    rts16
3955; CSKY-NEXT:    .p2align 1
3956; CSKY-NEXT:  # %bb.1:
3957; CSKY-NEXT:    .p2align 2
3958; CSKY-NEXT:  .LCPI139_0:
3959; CSKY-NEXT:    .long __atomic_fetch_or_4
3960;
3961  %1 = atomicrmw or i32* %a, i32 %b seq_cst
3962  ret i32 %1
3963}
3964
3965define i32 @atomicrmw_xor_i32_monotonic(i32 *%a, i32 %b) nounwind {
3966; CSKY-LABEL: atomicrmw_xor_i32_monotonic:
3967; CSKY:       # %bb.0:
3968; CSKY-NEXT:    subi16 sp, sp, 4
3969; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3970; CSKY-NEXT:    movi16 a2, 0
3971; CSKY-NEXT:    jsri32 [.LCPI140_0]
3972; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3973; CSKY-NEXT:    addi16 sp, sp, 4
3974; CSKY-NEXT:    rts16
3975; CSKY-NEXT:    .p2align 1
3976; CSKY-NEXT:  # %bb.1:
3977; CSKY-NEXT:    .p2align 2
3978; CSKY-NEXT:  .LCPI140_0:
3979; CSKY-NEXT:    .long __atomic_fetch_xor_4
3980;
3981  %1 = atomicrmw xor i32* %a, i32 %b monotonic
3982  ret i32 %1
3983}
3984
3985define i32 @atomicrmw_xor_i32_acquire(i32 *%a, i32 %b) nounwind {
3986; CSKY-LABEL: atomicrmw_xor_i32_acquire:
3987; CSKY:       # %bb.0:
3988; CSKY-NEXT:    subi16 sp, sp, 4
3989; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
3990; CSKY-NEXT:    movi16 a2, 2
3991; CSKY-NEXT:    jsri32 [.LCPI141_0]
3992; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
3993; CSKY-NEXT:    addi16 sp, sp, 4
3994; CSKY-NEXT:    rts16
3995; CSKY-NEXT:    .p2align 1
3996; CSKY-NEXT:  # %bb.1:
3997; CSKY-NEXT:    .p2align 2
3998; CSKY-NEXT:  .LCPI141_0:
3999; CSKY-NEXT:    .long __atomic_fetch_xor_4
4000;
4001  %1 = atomicrmw xor i32* %a, i32 %b acquire
4002  ret i32 %1
4003}
4004
4005define i32 @atomicrmw_xor_i32_release(i32 *%a, i32 %b) nounwind {
4006; CSKY-LABEL: atomicrmw_xor_i32_release:
4007; CSKY:       # %bb.0:
4008; CSKY-NEXT:    subi16 sp, sp, 4
4009; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4010; CSKY-NEXT:    movi16 a2, 3
4011; CSKY-NEXT:    jsri32 [.LCPI142_0]
4012; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4013; CSKY-NEXT:    addi16 sp, sp, 4
4014; CSKY-NEXT:    rts16
4015; CSKY-NEXT:    .p2align 1
4016; CSKY-NEXT:  # %bb.1:
4017; CSKY-NEXT:    .p2align 2
4018; CSKY-NEXT:  .LCPI142_0:
4019; CSKY-NEXT:    .long __atomic_fetch_xor_4
4020;
4021  %1 = atomicrmw xor i32* %a, i32 %b release
4022  ret i32 %1
4023}
4024
4025define i32 @atomicrmw_xor_i32_acq_rel(i32 *%a, i32 %b) nounwind {
4026; CSKY-LABEL: atomicrmw_xor_i32_acq_rel:
4027; CSKY:       # %bb.0:
4028; CSKY-NEXT:    subi16 sp, sp, 4
4029; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4030; CSKY-NEXT:    movi16 a2, 4
4031; CSKY-NEXT:    jsri32 [.LCPI143_0]
4032; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4033; CSKY-NEXT:    addi16 sp, sp, 4
4034; CSKY-NEXT:    rts16
4035; CSKY-NEXT:    .p2align 1
4036; CSKY-NEXT:  # %bb.1:
4037; CSKY-NEXT:    .p2align 2
4038; CSKY-NEXT:  .LCPI143_0:
4039; CSKY-NEXT:    .long __atomic_fetch_xor_4
4040;
4041  %1 = atomicrmw xor i32* %a, i32 %b acq_rel
4042  ret i32 %1
4043}
4044
4045define i32 @atomicrmw_xor_i32_seq_cst(i32 *%a, i32 %b) nounwind {
4046; CSKY-LABEL: atomicrmw_xor_i32_seq_cst:
4047; CSKY:       # %bb.0:
4048; CSKY-NEXT:    subi16 sp, sp, 4
4049; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4050; CSKY-NEXT:    movi16 a2, 5
4051; CSKY-NEXT:    jsri32 [.LCPI144_0]
4052; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4053; CSKY-NEXT:    addi16 sp, sp, 4
4054; CSKY-NEXT:    rts16
4055; CSKY-NEXT:    .p2align 1
4056; CSKY-NEXT:  # %bb.1:
4057; CSKY-NEXT:    .p2align 2
4058; CSKY-NEXT:  .LCPI144_0:
4059; CSKY-NEXT:    .long __atomic_fetch_xor_4
4060;
4061  %1 = atomicrmw xor i32* %a, i32 %b seq_cst
4062  ret i32 %1
4063}
4064
4065define i32 @atomicrmw_max_i32_monotonic(i32 *%a, i32 %b) nounwind {
4066; CSKY-LABEL: atomicrmw_max_i32_monotonic:
4067; CSKY:       # %bb.0:
4068; CSKY-NEXT:    subi16 sp, sp, 16
4069; CSKY-NEXT:    st16.w l2, (sp, 12)
4070; CSKY-NEXT:    st16.w l1, (sp, 8)
4071; CSKY-NEXT:    st16.w l0, (sp, 4)
4072; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4073; CSKY-NEXT:    subi16 sp, sp, 8
4074; CSKY-NEXT:    mov16 l0, a1
4075; CSKY-NEXT:    mov16 l1, a0
4076; CSKY-NEXT:    ld16.w a0, (a0, 0)
4077; CSKY-NEXT:    movi16 l2, 0
4078; CSKY-NEXT:  .LBB145_1: # %atomicrmw.start
4079; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4080; CSKY-NEXT:    cmplt16 l0, a0
4081; CSKY-NEXT:    mov16 a2, l0
4082; CSKY-NEXT:    movt32 a2, a0
4083; CSKY-NEXT:    st16.w a0, (sp, 4)
4084; CSKY-NEXT:    st16.w l2, (sp, 0)
4085; CSKY-NEXT:    mov16 a0, l1
4086; CSKY-NEXT:    addi16 a1, sp, 4
4087; CSKY-NEXT:    movi16 a3, 0
4088; CSKY-NEXT:    jsri32 [.LCPI145_0]
4089; CSKY-NEXT:    mov16 a1, a0
4090; CSKY-NEXT:    ld16.w a0, (sp, 4)
4091; CSKY-NEXT:    bez32 a1, .LBB145_1
4092; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4093; CSKY-NEXT:    addi16 sp, sp, 8
4094; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4095; CSKY-NEXT:    ld16.w l0, (sp, 4)
4096; CSKY-NEXT:    ld16.w l1, (sp, 8)
4097; CSKY-NEXT:    ld16.w l2, (sp, 12)
4098; CSKY-NEXT:    addi16 sp, sp, 16
4099; CSKY-NEXT:    rts16
4100; CSKY-NEXT:    .p2align 1
4101; CSKY-NEXT:  # %bb.3:
4102; CSKY-NEXT:    .p2align 2
4103; CSKY-NEXT:  .LCPI145_0:
4104; CSKY-NEXT:    .long __atomic_compare_exchange_4
4105;
4106  %1 = atomicrmw max i32* %a, i32 %b monotonic
4107  ret i32 %1
4108}
4109
4110define i32 @atomicrmw_max_i32_acquire(i32 *%a, i32 %b) nounwind {
4111; CSKY-LABEL: atomicrmw_max_i32_acquire:
4112; CSKY:       # %bb.0:
4113; CSKY-NEXT:    subi16 sp, sp, 16
4114; CSKY-NEXT:    st16.w l2, (sp, 12)
4115; CSKY-NEXT:    st16.w l1, (sp, 8)
4116; CSKY-NEXT:    st16.w l0, (sp, 4)
4117; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4118; CSKY-NEXT:    subi16 sp, sp, 8
4119; CSKY-NEXT:    mov16 l0, a1
4120; CSKY-NEXT:    mov16 l1, a0
4121; CSKY-NEXT:    ld16.w a0, (a0, 0)
4122; CSKY-NEXT:    movi16 l2, 2
4123; CSKY-NEXT:  .LBB146_1: # %atomicrmw.start
4124; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4125; CSKY-NEXT:    cmplt16 l0, a0
4126; CSKY-NEXT:    mov16 a2, l0
4127; CSKY-NEXT:    movt32 a2, a0
4128; CSKY-NEXT:    st16.w a0, (sp, 4)
4129; CSKY-NEXT:    st16.w l2, (sp, 0)
4130; CSKY-NEXT:    mov16 a0, l1
4131; CSKY-NEXT:    addi16 a1, sp, 4
4132; CSKY-NEXT:    movi16 a3, 2
4133; CSKY-NEXT:    jsri32 [.LCPI146_0]
4134; CSKY-NEXT:    mov16 a1, a0
4135; CSKY-NEXT:    ld16.w a0, (sp, 4)
4136; CSKY-NEXT:    bez32 a1, .LBB146_1
4137; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4138; CSKY-NEXT:    addi16 sp, sp, 8
4139; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4140; CSKY-NEXT:    ld16.w l0, (sp, 4)
4141; CSKY-NEXT:    ld16.w l1, (sp, 8)
4142; CSKY-NEXT:    ld16.w l2, (sp, 12)
4143; CSKY-NEXT:    addi16 sp, sp, 16
4144; CSKY-NEXT:    rts16
4145; CSKY-NEXT:    .p2align 1
4146; CSKY-NEXT:  # %bb.3:
4147; CSKY-NEXT:    .p2align 2
4148; CSKY-NEXT:  .LCPI146_0:
4149; CSKY-NEXT:    .long __atomic_compare_exchange_4
4150;
4151  %1 = atomicrmw max i32* %a, i32 %b acquire
4152  ret i32 %1
4153}
4154
4155define i32 @atomicrmw_max_i32_release(i32 *%a, i32 %b) nounwind {
4156; CSKY-LABEL: atomicrmw_max_i32_release:
4157; CSKY:       # %bb.0:
4158; CSKY-NEXT:    subi16 sp, sp, 16
4159; CSKY-NEXT:    st16.w l2, (sp, 12)
4160; CSKY-NEXT:    st16.w l1, (sp, 8)
4161; CSKY-NEXT:    st16.w l0, (sp, 4)
4162; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4163; CSKY-NEXT:    subi16 sp, sp, 8
4164; CSKY-NEXT:    mov16 l0, a1
4165; CSKY-NEXT:    mov16 l1, a0
4166; CSKY-NEXT:    ld16.w a0, (a0, 0)
4167; CSKY-NEXT:    movi16 l2, 0
4168; CSKY-NEXT:  .LBB147_1: # %atomicrmw.start
4169; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4170; CSKY-NEXT:    cmplt16 l0, a0
4171; CSKY-NEXT:    mov16 a2, l0
4172; CSKY-NEXT:    movt32 a2, a0
4173; CSKY-NEXT:    st16.w a0, (sp, 4)
4174; CSKY-NEXT:    st16.w l2, (sp, 0)
4175; CSKY-NEXT:    mov16 a0, l1
4176; CSKY-NEXT:    addi16 a1, sp, 4
4177; CSKY-NEXT:    movi16 a3, 3
4178; CSKY-NEXT:    jsri32 [.LCPI147_0]
4179; CSKY-NEXT:    mov16 a1, a0
4180; CSKY-NEXT:    ld16.w a0, (sp, 4)
4181; CSKY-NEXT:    bez32 a1, .LBB147_1
4182; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4183; CSKY-NEXT:    addi16 sp, sp, 8
4184; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4185; CSKY-NEXT:    ld16.w l0, (sp, 4)
4186; CSKY-NEXT:    ld16.w l1, (sp, 8)
4187; CSKY-NEXT:    ld16.w l2, (sp, 12)
4188; CSKY-NEXT:    addi16 sp, sp, 16
4189; CSKY-NEXT:    rts16
4190; CSKY-NEXT:    .p2align 1
4191; CSKY-NEXT:  # %bb.3:
4192; CSKY-NEXT:    .p2align 2
4193; CSKY-NEXT:  .LCPI147_0:
4194; CSKY-NEXT:    .long __atomic_compare_exchange_4
4195;
4196  %1 = atomicrmw max i32* %a, i32 %b release
4197  ret i32 %1
4198}
4199
4200define i32 @atomicrmw_max_i32_acq_rel(i32 *%a, i32 %b) nounwind {
4201; CSKY-LABEL: atomicrmw_max_i32_acq_rel:
4202; CSKY:       # %bb.0:
4203; CSKY-NEXT:    subi16 sp, sp, 16
4204; CSKY-NEXT:    st16.w l2, (sp, 12)
4205; CSKY-NEXT:    st16.w l1, (sp, 8)
4206; CSKY-NEXT:    st16.w l0, (sp, 4)
4207; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4208; CSKY-NEXT:    subi16 sp, sp, 8
4209; CSKY-NEXT:    mov16 l0, a1
4210; CSKY-NEXT:    mov16 l1, a0
4211; CSKY-NEXT:    ld16.w a0, (a0, 0)
4212; CSKY-NEXT:    movi16 l2, 2
4213; CSKY-NEXT:  .LBB148_1: # %atomicrmw.start
4214; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4215; CSKY-NEXT:    cmplt16 l0, a0
4216; CSKY-NEXT:    mov16 a2, l0
4217; CSKY-NEXT:    movt32 a2, a0
4218; CSKY-NEXT:    st16.w a0, (sp, 4)
4219; CSKY-NEXT:    st16.w l2, (sp, 0)
4220; CSKY-NEXT:    mov16 a0, l1
4221; CSKY-NEXT:    addi16 a1, sp, 4
4222; CSKY-NEXT:    movi16 a3, 4
4223; CSKY-NEXT:    jsri32 [.LCPI148_0]
4224; CSKY-NEXT:    mov16 a1, a0
4225; CSKY-NEXT:    ld16.w a0, (sp, 4)
4226; CSKY-NEXT:    bez32 a1, .LBB148_1
4227; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4228; CSKY-NEXT:    addi16 sp, sp, 8
4229; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4230; CSKY-NEXT:    ld16.w l0, (sp, 4)
4231; CSKY-NEXT:    ld16.w l1, (sp, 8)
4232; CSKY-NEXT:    ld16.w l2, (sp, 12)
4233; CSKY-NEXT:    addi16 sp, sp, 16
4234; CSKY-NEXT:    rts16
4235; CSKY-NEXT:    .p2align 1
4236; CSKY-NEXT:  # %bb.3:
4237; CSKY-NEXT:    .p2align 2
4238; CSKY-NEXT:  .LCPI148_0:
4239; CSKY-NEXT:    .long __atomic_compare_exchange_4
4240;
4241  %1 = atomicrmw max i32* %a, i32 %b acq_rel
4242  ret i32 %1
4243}
4244
4245define i32 @atomicrmw_max_i32_seq_cst(i32 *%a, i32 %b) nounwind {
4246; CSKY-LABEL: atomicrmw_max_i32_seq_cst:
4247; CSKY:       # %bb.0:
4248; CSKY-NEXT:    subi16 sp, sp, 16
4249; CSKY-NEXT:    st16.w l2, (sp, 12)
4250; CSKY-NEXT:    st16.w l1, (sp, 8)
4251; CSKY-NEXT:    st16.w l0, (sp, 4)
4252; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4253; CSKY-NEXT:    subi16 sp, sp, 8
4254; CSKY-NEXT:    mov16 l0, a1
4255; CSKY-NEXT:    mov16 l1, a0
4256; CSKY-NEXT:    ld16.w a0, (a0, 0)
4257; CSKY-NEXT:    movi16 l2, 5
4258; CSKY-NEXT:  .LBB149_1: # %atomicrmw.start
4259; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4260; CSKY-NEXT:    cmplt16 l0, a0
4261; CSKY-NEXT:    mov16 a2, l0
4262; CSKY-NEXT:    movt32 a2, a0
4263; CSKY-NEXT:    st16.w a0, (sp, 4)
4264; CSKY-NEXT:    st16.w l2, (sp, 0)
4265; CSKY-NEXT:    mov16 a0, l1
4266; CSKY-NEXT:    addi16 a1, sp, 4
4267; CSKY-NEXT:    movi16 a3, 5
4268; CSKY-NEXT:    jsri32 [.LCPI149_0]
4269; CSKY-NEXT:    mov16 a1, a0
4270; CSKY-NEXT:    ld16.w a0, (sp, 4)
4271; CSKY-NEXT:    bez32 a1, .LBB149_1
4272; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4273; CSKY-NEXT:    addi16 sp, sp, 8
4274; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4275; CSKY-NEXT:    ld16.w l0, (sp, 4)
4276; CSKY-NEXT:    ld16.w l1, (sp, 8)
4277; CSKY-NEXT:    ld16.w l2, (sp, 12)
4278; CSKY-NEXT:    addi16 sp, sp, 16
4279; CSKY-NEXT:    rts16
4280; CSKY-NEXT:    .p2align 1
4281; CSKY-NEXT:  # %bb.3:
4282; CSKY-NEXT:    .p2align 2
4283; CSKY-NEXT:  .LCPI149_0:
4284; CSKY-NEXT:    .long __atomic_compare_exchange_4
4285;
4286  %1 = atomicrmw max i32* %a, i32 %b seq_cst
4287  ret i32 %1
4288}
4289
4290define i32 @atomicrmw_min_i32_monotonic(i32 *%a, i32 %b) nounwind {
4291; CSKY-LABEL: atomicrmw_min_i32_monotonic:
4292; CSKY:       # %bb.0:
4293; CSKY-NEXT:    subi16 sp, sp, 16
4294; CSKY-NEXT:    st16.w l2, (sp, 12)
4295; CSKY-NEXT:    st16.w l1, (sp, 8)
4296; CSKY-NEXT:    st16.w l0, (sp, 4)
4297; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4298; CSKY-NEXT:    subi16 sp, sp, 8
4299; CSKY-NEXT:    mov16 l0, a1
4300; CSKY-NEXT:    mov16 l1, a0
4301; CSKY-NEXT:    ld16.w a0, (a0, 0)
4302; CSKY-NEXT:    movi16 l2, 0
4303; CSKY-NEXT:  .LBB150_1: # %atomicrmw.start
4304; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4305; CSKY-NEXT:    cmplt16 l0, a0
4306; CSKY-NEXT:    mov16 a2, l0
4307; CSKY-NEXT:    movf32 a2, a0
4308; CSKY-NEXT:    st16.w a0, (sp, 4)
4309; CSKY-NEXT:    st16.w l2, (sp, 0)
4310; CSKY-NEXT:    mov16 a0, l1
4311; CSKY-NEXT:    addi16 a1, sp, 4
4312; CSKY-NEXT:    movi16 a3, 0
4313; CSKY-NEXT:    jsri32 [.LCPI150_0]
4314; CSKY-NEXT:    mov16 a1, a0
4315; CSKY-NEXT:    ld16.w a0, (sp, 4)
4316; CSKY-NEXT:    bez32 a1, .LBB150_1
4317; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4318; CSKY-NEXT:    addi16 sp, sp, 8
4319; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4320; CSKY-NEXT:    ld16.w l0, (sp, 4)
4321; CSKY-NEXT:    ld16.w l1, (sp, 8)
4322; CSKY-NEXT:    ld16.w l2, (sp, 12)
4323; CSKY-NEXT:    addi16 sp, sp, 16
4324; CSKY-NEXT:    rts16
4325; CSKY-NEXT:    .p2align 1
4326; CSKY-NEXT:  # %bb.3:
4327; CSKY-NEXT:    .p2align 2
4328; CSKY-NEXT:  .LCPI150_0:
4329; CSKY-NEXT:    .long __atomic_compare_exchange_4
4330;
4331  %1 = atomicrmw min i32* %a, i32 %b monotonic
4332  ret i32 %1
4333}
4334
4335define i32 @atomicrmw_min_i32_acquire(i32 *%a, i32 %b) nounwind {
4336; CSKY-LABEL: atomicrmw_min_i32_acquire:
4337; CSKY:       # %bb.0:
4338; CSKY-NEXT:    subi16 sp, sp, 16
4339; CSKY-NEXT:    st16.w l2, (sp, 12)
4340; CSKY-NEXT:    st16.w l1, (sp, 8)
4341; CSKY-NEXT:    st16.w l0, (sp, 4)
4342; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4343; CSKY-NEXT:    subi16 sp, sp, 8
4344; CSKY-NEXT:    mov16 l0, a1
4345; CSKY-NEXT:    mov16 l1, a0
4346; CSKY-NEXT:    ld16.w a0, (a0, 0)
4347; CSKY-NEXT:    movi16 l2, 2
4348; CSKY-NEXT:  .LBB151_1: # %atomicrmw.start
4349; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4350; CSKY-NEXT:    cmplt16 l0, a0
4351; CSKY-NEXT:    mov16 a2, l0
4352; CSKY-NEXT:    movf32 a2, a0
4353; CSKY-NEXT:    st16.w a0, (sp, 4)
4354; CSKY-NEXT:    st16.w l2, (sp, 0)
4355; CSKY-NEXT:    mov16 a0, l1
4356; CSKY-NEXT:    addi16 a1, sp, 4
4357; CSKY-NEXT:    movi16 a3, 2
4358; CSKY-NEXT:    jsri32 [.LCPI151_0]
4359; CSKY-NEXT:    mov16 a1, a0
4360; CSKY-NEXT:    ld16.w a0, (sp, 4)
4361; CSKY-NEXT:    bez32 a1, .LBB151_1
4362; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4363; CSKY-NEXT:    addi16 sp, sp, 8
4364; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4365; CSKY-NEXT:    ld16.w l0, (sp, 4)
4366; CSKY-NEXT:    ld16.w l1, (sp, 8)
4367; CSKY-NEXT:    ld16.w l2, (sp, 12)
4368; CSKY-NEXT:    addi16 sp, sp, 16
4369; CSKY-NEXT:    rts16
4370; CSKY-NEXT:    .p2align 1
4371; CSKY-NEXT:  # %bb.3:
4372; CSKY-NEXT:    .p2align 2
4373; CSKY-NEXT:  .LCPI151_0:
4374; CSKY-NEXT:    .long __atomic_compare_exchange_4
4375;
4376  %1 = atomicrmw min i32* %a, i32 %b acquire
4377  ret i32 %1
4378}
4379
4380define i32 @atomicrmw_min_i32_release(i32 *%a, i32 %b) nounwind {
4381; CSKY-LABEL: atomicrmw_min_i32_release:
4382; CSKY:       # %bb.0:
4383; CSKY-NEXT:    subi16 sp, sp, 16
4384; CSKY-NEXT:    st16.w l2, (sp, 12)
4385; CSKY-NEXT:    st16.w l1, (sp, 8)
4386; CSKY-NEXT:    st16.w l0, (sp, 4)
4387; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4388; CSKY-NEXT:    subi16 sp, sp, 8
4389; CSKY-NEXT:    mov16 l0, a1
4390; CSKY-NEXT:    mov16 l1, a0
4391; CSKY-NEXT:    ld16.w a0, (a0, 0)
4392; CSKY-NEXT:    movi16 l2, 0
4393; CSKY-NEXT:  .LBB152_1: # %atomicrmw.start
4394; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4395; CSKY-NEXT:    cmplt16 l0, a0
4396; CSKY-NEXT:    mov16 a2, l0
4397; CSKY-NEXT:    movf32 a2, a0
4398; CSKY-NEXT:    st16.w a0, (sp, 4)
4399; CSKY-NEXT:    st16.w l2, (sp, 0)
4400; CSKY-NEXT:    mov16 a0, l1
4401; CSKY-NEXT:    addi16 a1, sp, 4
4402; CSKY-NEXT:    movi16 a3, 3
4403; CSKY-NEXT:    jsri32 [.LCPI152_0]
4404; CSKY-NEXT:    mov16 a1, a0
4405; CSKY-NEXT:    ld16.w a0, (sp, 4)
4406; CSKY-NEXT:    bez32 a1, .LBB152_1
4407; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4408; CSKY-NEXT:    addi16 sp, sp, 8
4409; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4410; CSKY-NEXT:    ld16.w l0, (sp, 4)
4411; CSKY-NEXT:    ld16.w l1, (sp, 8)
4412; CSKY-NEXT:    ld16.w l2, (sp, 12)
4413; CSKY-NEXT:    addi16 sp, sp, 16
4414; CSKY-NEXT:    rts16
4415; CSKY-NEXT:    .p2align 1
4416; CSKY-NEXT:  # %bb.3:
4417; CSKY-NEXT:    .p2align 2
4418; CSKY-NEXT:  .LCPI152_0:
4419; CSKY-NEXT:    .long __atomic_compare_exchange_4
4420;
4421  %1 = atomicrmw min i32* %a, i32 %b release
4422  ret i32 %1
4423}
4424
4425define i32 @atomicrmw_min_i32_acq_rel(i32 *%a, i32 %b) nounwind {
4426; CSKY-LABEL: atomicrmw_min_i32_acq_rel:
4427; CSKY:       # %bb.0:
4428; CSKY-NEXT:    subi16 sp, sp, 16
4429; CSKY-NEXT:    st16.w l2, (sp, 12)
4430; CSKY-NEXT:    st16.w l1, (sp, 8)
4431; CSKY-NEXT:    st16.w l0, (sp, 4)
4432; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4433; CSKY-NEXT:    subi16 sp, sp, 8
4434; CSKY-NEXT:    mov16 l0, a1
4435; CSKY-NEXT:    mov16 l1, a0
4436; CSKY-NEXT:    ld16.w a0, (a0, 0)
4437; CSKY-NEXT:    movi16 l2, 2
4438; CSKY-NEXT:  .LBB153_1: # %atomicrmw.start
4439; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4440; CSKY-NEXT:    cmplt16 l0, a0
4441; CSKY-NEXT:    mov16 a2, l0
4442; CSKY-NEXT:    movf32 a2, a0
4443; CSKY-NEXT:    st16.w a0, (sp, 4)
4444; CSKY-NEXT:    st16.w l2, (sp, 0)
4445; CSKY-NEXT:    mov16 a0, l1
4446; CSKY-NEXT:    addi16 a1, sp, 4
4447; CSKY-NEXT:    movi16 a3, 4
4448; CSKY-NEXT:    jsri32 [.LCPI153_0]
4449; CSKY-NEXT:    mov16 a1, a0
4450; CSKY-NEXT:    ld16.w a0, (sp, 4)
4451; CSKY-NEXT:    bez32 a1, .LBB153_1
4452; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4453; CSKY-NEXT:    addi16 sp, sp, 8
4454; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4455; CSKY-NEXT:    ld16.w l0, (sp, 4)
4456; CSKY-NEXT:    ld16.w l1, (sp, 8)
4457; CSKY-NEXT:    ld16.w l2, (sp, 12)
4458; CSKY-NEXT:    addi16 sp, sp, 16
4459; CSKY-NEXT:    rts16
4460; CSKY-NEXT:    .p2align 1
4461; CSKY-NEXT:  # %bb.3:
4462; CSKY-NEXT:    .p2align 2
4463; CSKY-NEXT:  .LCPI153_0:
4464; CSKY-NEXT:    .long __atomic_compare_exchange_4
4465;
4466  %1 = atomicrmw min i32* %a, i32 %b acq_rel
4467  ret i32 %1
4468}
4469
4470define i32 @atomicrmw_min_i32_seq_cst(i32 *%a, i32 %b) nounwind {
4471; CSKY-LABEL: atomicrmw_min_i32_seq_cst:
4472; CSKY:       # %bb.0:
4473; CSKY-NEXT:    subi16 sp, sp, 16
4474; CSKY-NEXT:    st16.w l2, (sp, 12)
4475; CSKY-NEXT:    st16.w l1, (sp, 8)
4476; CSKY-NEXT:    st16.w l0, (sp, 4)
4477; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4478; CSKY-NEXT:    subi16 sp, sp, 8
4479; CSKY-NEXT:    mov16 l0, a1
4480; CSKY-NEXT:    mov16 l1, a0
4481; CSKY-NEXT:    ld16.w a0, (a0, 0)
4482; CSKY-NEXT:    movi16 l2, 5
4483; CSKY-NEXT:  .LBB154_1: # %atomicrmw.start
4484; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4485; CSKY-NEXT:    cmplt16 l0, a0
4486; CSKY-NEXT:    mov16 a2, l0
4487; CSKY-NEXT:    movf32 a2, a0
4488; CSKY-NEXT:    st16.w a0, (sp, 4)
4489; CSKY-NEXT:    st16.w l2, (sp, 0)
4490; CSKY-NEXT:    mov16 a0, l1
4491; CSKY-NEXT:    addi16 a1, sp, 4
4492; CSKY-NEXT:    movi16 a3, 5
4493; CSKY-NEXT:    jsri32 [.LCPI154_0]
4494; CSKY-NEXT:    mov16 a1, a0
4495; CSKY-NEXT:    ld16.w a0, (sp, 4)
4496; CSKY-NEXT:    bez32 a1, .LBB154_1
4497; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4498; CSKY-NEXT:    addi16 sp, sp, 8
4499; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4500; CSKY-NEXT:    ld16.w l0, (sp, 4)
4501; CSKY-NEXT:    ld16.w l1, (sp, 8)
4502; CSKY-NEXT:    ld16.w l2, (sp, 12)
4503; CSKY-NEXT:    addi16 sp, sp, 16
4504; CSKY-NEXT:    rts16
4505; CSKY-NEXT:    .p2align 1
4506; CSKY-NEXT:  # %bb.3:
4507; CSKY-NEXT:    .p2align 2
4508; CSKY-NEXT:  .LCPI154_0:
4509; CSKY-NEXT:    .long __atomic_compare_exchange_4
4510;
4511  %1 = atomicrmw min i32* %a, i32 %b seq_cst
4512  ret i32 %1
4513}
4514
4515define i32 @atomicrmw_umax_i32_monotonic(i32 *%a, i32 %b) nounwind {
4516; CSKY-LABEL: atomicrmw_umax_i32_monotonic:
4517; CSKY:       # %bb.0:
4518; CSKY-NEXT:    subi16 sp, sp, 16
4519; CSKY-NEXT:    st16.w l2, (sp, 12)
4520; CSKY-NEXT:    st16.w l1, (sp, 8)
4521; CSKY-NEXT:    st16.w l0, (sp, 4)
4522; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4523; CSKY-NEXT:    subi16 sp, sp, 8
4524; CSKY-NEXT:    mov16 l0, a1
4525; CSKY-NEXT:    mov16 l1, a0
4526; CSKY-NEXT:    ld16.w a0, (a0, 0)
4527; CSKY-NEXT:    movi16 l2, 0
4528; CSKY-NEXT:  .LBB155_1: # %atomicrmw.start
4529; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4530; CSKY-NEXT:    cmphs16 l0, a0
4531; CSKY-NEXT:    mov16 a2, l0
4532; CSKY-NEXT:    movf32 a2, a0
4533; CSKY-NEXT:    st16.w a0, (sp, 4)
4534; CSKY-NEXT:    st16.w l2, (sp, 0)
4535; CSKY-NEXT:    mov16 a0, l1
4536; CSKY-NEXT:    addi16 a1, sp, 4
4537; CSKY-NEXT:    movi16 a3, 0
4538; CSKY-NEXT:    jsri32 [.LCPI155_0]
4539; CSKY-NEXT:    mov16 a1, a0
4540; CSKY-NEXT:    ld16.w a0, (sp, 4)
4541; CSKY-NEXT:    bez32 a1, .LBB155_1
4542; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4543; CSKY-NEXT:    addi16 sp, sp, 8
4544; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4545; CSKY-NEXT:    ld16.w l0, (sp, 4)
4546; CSKY-NEXT:    ld16.w l1, (sp, 8)
4547; CSKY-NEXT:    ld16.w l2, (sp, 12)
4548; CSKY-NEXT:    addi16 sp, sp, 16
4549; CSKY-NEXT:    rts16
4550; CSKY-NEXT:    .p2align 1
4551; CSKY-NEXT:  # %bb.3:
4552; CSKY-NEXT:    .p2align 2
4553; CSKY-NEXT:  .LCPI155_0:
4554; CSKY-NEXT:    .long __atomic_compare_exchange_4
4555;
4556  %1 = atomicrmw umax i32* %a, i32 %b monotonic
4557  ret i32 %1
4558}
4559
4560define i32 @atomicrmw_umax_i32_acquire(i32 *%a, i32 %b) nounwind {
4561; CSKY-LABEL: atomicrmw_umax_i32_acquire:
4562; CSKY:       # %bb.0:
4563; CSKY-NEXT:    subi16 sp, sp, 16
4564; CSKY-NEXT:    st16.w l2, (sp, 12)
4565; CSKY-NEXT:    st16.w l1, (sp, 8)
4566; CSKY-NEXT:    st16.w l0, (sp, 4)
4567; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4568; CSKY-NEXT:    subi16 sp, sp, 8
4569; CSKY-NEXT:    mov16 l0, a1
4570; CSKY-NEXT:    mov16 l1, a0
4571; CSKY-NEXT:    ld16.w a0, (a0, 0)
4572; CSKY-NEXT:    movi16 l2, 2
4573; CSKY-NEXT:  .LBB156_1: # %atomicrmw.start
4574; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4575; CSKY-NEXT:    cmphs16 l0, a0
4576; CSKY-NEXT:    mov16 a2, l0
4577; CSKY-NEXT:    movf32 a2, a0
4578; CSKY-NEXT:    st16.w a0, (sp, 4)
4579; CSKY-NEXT:    st16.w l2, (sp, 0)
4580; CSKY-NEXT:    mov16 a0, l1
4581; CSKY-NEXT:    addi16 a1, sp, 4
4582; CSKY-NEXT:    movi16 a3, 2
4583; CSKY-NEXT:    jsri32 [.LCPI156_0]
4584; CSKY-NEXT:    mov16 a1, a0
4585; CSKY-NEXT:    ld16.w a0, (sp, 4)
4586; CSKY-NEXT:    bez32 a1, .LBB156_1
4587; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4588; CSKY-NEXT:    addi16 sp, sp, 8
4589; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4590; CSKY-NEXT:    ld16.w l0, (sp, 4)
4591; CSKY-NEXT:    ld16.w l1, (sp, 8)
4592; CSKY-NEXT:    ld16.w l2, (sp, 12)
4593; CSKY-NEXT:    addi16 sp, sp, 16
4594; CSKY-NEXT:    rts16
4595; CSKY-NEXT:    .p2align 1
4596; CSKY-NEXT:  # %bb.3:
4597; CSKY-NEXT:    .p2align 2
4598; CSKY-NEXT:  .LCPI156_0:
4599; CSKY-NEXT:    .long __atomic_compare_exchange_4
4600;
4601  %1 = atomicrmw umax i32* %a, i32 %b acquire
4602  ret i32 %1
4603}
4604
4605define i32 @atomicrmw_umax_i32_release(i32 *%a, i32 %b) nounwind {
4606; CSKY-LABEL: atomicrmw_umax_i32_release:
4607; CSKY:       # %bb.0:
4608; CSKY-NEXT:    subi16 sp, sp, 16
4609; CSKY-NEXT:    st16.w l2, (sp, 12)
4610; CSKY-NEXT:    st16.w l1, (sp, 8)
4611; CSKY-NEXT:    st16.w l0, (sp, 4)
4612; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4613; CSKY-NEXT:    subi16 sp, sp, 8
4614; CSKY-NEXT:    mov16 l0, a1
4615; CSKY-NEXT:    mov16 l1, a0
4616; CSKY-NEXT:    ld16.w a0, (a0, 0)
4617; CSKY-NEXT:    movi16 l2, 0
4618; CSKY-NEXT:  .LBB157_1: # %atomicrmw.start
4619; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4620; CSKY-NEXT:    cmphs16 l0, a0
4621; CSKY-NEXT:    mov16 a2, l0
4622; CSKY-NEXT:    movf32 a2, a0
4623; CSKY-NEXT:    st16.w a0, (sp, 4)
4624; CSKY-NEXT:    st16.w l2, (sp, 0)
4625; CSKY-NEXT:    mov16 a0, l1
4626; CSKY-NEXT:    addi16 a1, sp, 4
4627; CSKY-NEXT:    movi16 a3, 3
4628; CSKY-NEXT:    jsri32 [.LCPI157_0]
4629; CSKY-NEXT:    mov16 a1, a0
4630; CSKY-NEXT:    ld16.w a0, (sp, 4)
4631; CSKY-NEXT:    bez32 a1, .LBB157_1
4632; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4633; CSKY-NEXT:    addi16 sp, sp, 8
4634; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4635; CSKY-NEXT:    ld16.w l0, (sp, 4)
4636; CSKY-NEXT:    ld16.w l1, (sp, 8)
4637; CSKY-NEXT:    ld16.w l2, (sp, 12)
4638; CSKY-NEXT:    addi16 sp, sp, 16
4639; CSKY-NEXT:    rts16
4640; CSKY-NEXT:    .p2align 1
4641; CSKY-NEXT:  # %bb.3:
4642; CSKY-NEXT:    .p2align 2
4643; CSKY-NEXT:  .LCPI157_0:
4644; CSKY-NEXT:    .long __atomic_compare_exchange_4
4645;
4646  %1 = atomicrmw umax i32* %a, i32 %b release
4647  ret i32 %1
4648}
4649
4650define i32 @atomicrmw_umax_i32_acq_rel(i32 *%a, i32 %b) nounwind {
4651; CSKY-LABEL: atomicrmw_umax_i32_acq_rel:
4652; CSKY:       # %bb.0:
4653; CSKY-NEXT:    subi16 sp, sp, 16
4654; CSKY-NEXT:    st16.w l2, (sp, 12)
4655; CSKY-NEXT:    st16.w l1, (sp, 8)
4656; CSKY-NEXT:    st16.w l0, (sp, 4)
4657; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4658; CSKY-NEXT:    subi16 sp, sp, 8
4659; CSKY-NEXT:    mov16 l0, a1
4660; CSKY-NEXT:    mov16 l1, a0
4661; CSKY-NEXT:    ld16.w a0, (a0, 0)
4662; CSKY-NEXT:    movi16 l2, 2
4663; CSKY-NEXT:  .LBB158_1: # %atomicrmw.start
4664; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4665; CSKY-NEXT:    cmphs16 l0, a0
4666; CSKY-NEXT:    mov16 a2, l0
4667; CSKY-NEXT:    movf32 a2, a0
4668; CSKY-NEXT:    st16.w a0, (sp, 4)
4669; CSKY-NEXT:    st16.w l2, (sp, 0)
4670; CSKY-NEXT:    mov16 a0, l1
4671; CSKY-NEXT:    addi16 a1, sp, 4
4672; CSKY-NEXT:    movi16 a3, 4
4673; CSKY-NEXT:    jsri32 [.LCPI158_0]
4674; CSKY-NEXT:    mov16 a1, a0
4675; CSKY-NEXT:    ld16.w a0, (sp, 4)
4676; CSKY-NEXT:    bez32 a1, .LBB158_1
4677; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4678; CSKY-NEXT:    addi16 sp, sp, 8
4679; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4680; CSKY-NEXT:    ld16.w l0, (sp, 4)
4681; CSKY-NEXT:    ld16.w l1, (sp, 8)
4682; CSKY-NEXT:    ld16.w l2, (sp, 12)
4683; CSKY-NEXT:    addi16 sp, sp, 16
4684; CSKY-NEXT:    rts16
4685; CSKY-NEXT:    .p2align 1
4686; CSKY-NEXT:  # %bb.3:
4687; CSKY-NEXT:    .p2align 2
4688; CSKY-NEXT:  .LCPI158_0:
4689; CSKY-NEXT:    .long __atomic_compare_exchange_4
4690;
4691  %1 = atomicrmw umax i32* %a, i32 %b acq_rel
4692  ret i32 %1
4693}
4694
4695define i32 @atomicrmw_umax_i32_seq_cst(i32 *%a, i32 %b) nounwind {
4696; CSKY-LABEL: atomicrmw_umax_i32_seq_cst:
4697; CSKY:       # %bb.0:
4698; CSKY-NEXT:    subi16 sp, sp, 16
4699; CSKY-NEXT:    st16.w l2, (sp, 12)
4700; CSKY-NEXT:    st16.w l1, (sp, 8)
4701; CSKY-NEXT:    st16.w l0, (sp, 4)
4702; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4703; CSKY-NEXT:    subi16 sp, sp, 8
4704; CSKY-NEXT:    mov16 l0, a1
4705; CSKY-NEXT:    mov16 l1, a0
4706; CSKY-NEXT:    ld16.w a0, (a0, 0)
4707; CSKY-NEXT:    movi16 l2, 5
4708; CSKY-NEXT:  .LBB159_1: # %atomicrmw.start
4709; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4710; CSKY-NEXT:    cmphs16 l0, a0
4711; CSKY-NEXT:    mov16 a2, l0
4712; CSKY-NEXT:    movf32 a2, a0
4713; CSKY-NEXT:    st16.w a0, (sp, 4)
4714; CSKY-NEXT:    st16.w l2, (sp, 0)
4715; CSKY-NEXT:    mov16 a0, l1
4716; CSKY-NEXT:    addi16 a1, sp, 4
4717; CSKY-NEXT:    movi16 a3, 5
4718; CSKY-NEXT:    jsri32 [.LCPI159_0]
4719; CSKY-NEXT:    mov16 a1, a0
4720; CSKY-NEXT:    ld16.w a0, (sp, 4)
4721; CSKY-NEXT:    bez32 a1, .LBB159_1
4722; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4723; CSKY-NEXT:    addi16 sp, sp, 8
4724; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4725; CSKY-NEXT:    ld16.w l0, (sp, 4)
4726; CSKY-NEXT:    ld16.w l1, (sp, 8)
4727; CSKY-NEXT:    ld16.w l2, (sp, 12)
4728; CSKY-NEXT:    addi16 sp, sp, 16
4729; CSKY-NEXT:    rts16
4730; CSKY-NEXT:    .p2align 1
4731; CSKY-NEXT:  # %bb.3:
4732; CSKY-NEXT:    .p2align 2
4733; CSKY-NEXT:  .LCPI159_0:
4734; CSKY-NEXT:    .long __atomic_compare_exchange_4
4735;
4736  %1 = atomicrmw umax i32* %a, i32 %b seq_cst
4737  ret i32 %1
4738}
4739
4740define i32 @atomicrmw_umin_i32_monotonic(i32 *%a, i32 %b) nounwind {
4741; CSKY-LABEL: atomicrmw_umin_i32_monotonic:
4742; CSKY:       # %bb.0:
4743; CSKY-NEXT:    subi16 sp, sp, 16
4744; CSKY-NEXT:    st16.w l2, (sp, 12)
4745; CSKY-NEXT:    st16.w l1, (sp, 8)
4746; CSKY-NEXT:    st16.w l0, (sp, 4)
4747; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4748; CSKY-NEXT:    subi16 sp, sp, 8
4749; CSKY-NEXT:    mov16 l0, a1
4750; CSKY-NEXT:    mov16 l1, a0
4751; CSKY-NEXT:    ld16.w a0, (a0, 0)
4752; CSKY-NEXT:    movi16 l2, 0
4753; CSKY-NEXT:  .LBB160_1: # %atomicrmw.start
4754; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4755; CSKY-NEXT:    cmphs16 l0, a0
4756; CSKY-NEXT:    mov16 a2, l0
4757; CSKY-NEXT:    movt32 a2, a0
4758; CSKY-NEXT:    st16.w a0, (sp, 4)
4759; CSKY-NEXT:    st16.w l2, (sp, 0)
4760; CSKY-NEXT:    mov16 a0, l1
4761; CSKY-NEXT:    addi16 a1, sp, 4
4762; CSKY-NEXT:    movi16 a3, 0
4763; CSKY-NEXT:    jsri32 [.LCPI160_0]
4764; CSKY-NEXT:    mov16 a1, a0
4765; CSKY-NEXT:    ld16.w a0, (sp, 4)
4766; CSKY-NEXT:    bez32 a1, .LBB160_1
4767; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4768; CSKY-NEXT:    addi16 sp, sp, 8
4769; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4770; CSKY-NEXT:    ld16.w l0, (sp, 4)
4771; CSKY-NEXT:    ld16.w l1, (sp, 8)
4772; CSKY-NEXT:    ld16.w l2, (sp, 12)
4773; CSKY-NEXT:    addi16 sp, sp, 16
4774; CSKY-NEXT:    rts16
4775; CSKY-NEXT:    .p2align 1
4776; CSKY-NEXT:  # %bb.3:
4777; CSKY-NEXT:    .p2align 2
4778; CSKY-NEXT:  .LCPI160_0:
4779; CSKY-NEXT:    .long __atomic_compare_exchange_4
4780;
4781  %1 = atomicrmw umin i32* %a, i32 %b monotonic
4782  ret i32 %1
4783}
4784
4785define i32 @atomicrmw_umin_i32_acquire(i32 *%a, i32 %b) nounwind {
4786; CSKY-LABEL: atomicrmw_umin_i32_acquire:
4787; CSKY:       # %bb.0:
4788; CSKY-NEXT:    subi16 sp, sp, 16
4789; CSKY-NEXT:    st16.w l2, (sp, 12)
4790; CSKY-NEXT:    st16.w l1, (sp, 8)
4791; CSKY-NEXT:    st16.w l0, (sp, 4)
4792; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4793; CSKY-NEXT:    subi16 sp, sp, 8
4794; CSKY-NEXT:    mov16 l0, a1
4795; CSKY-NEXT:    mov16 l1, a0
4796; CSKY-NEXT:    ld16.w a0, (a0, 0)
4797; CSKY-NEXT:    movi16 l2, 2
4798; CSKY-NEXT:  .LBB161_1: # %atomicrmw.start
4799; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4800; CSKY-NEXT:    cmphs16 l0, a0
4801; CSKY-NEXT:    mov16 a2, l0
4802; CSKY-NEXT:    movt32 a2, a0
4803; CSKY-NEXT:    st16.w a0, (sp, 4)
4804; CSKY-NEXT:    st16.w l2, (sp, 0)
4805; CSKY-NEXT:    mov16 a0, l1
4806; CSKY-NEXT:    addi16 a1, sp, 4
4807; CSKY-NEXT:    movi16 a3, 2
4808; CSKY-NEXT:    jsri32 [.LCPI161_0]
4809; CSKY-NEXT:    mov16 a1, a0
4810; CSKY-NEXT:    ld16.w a0, (sp, 4)
4811; CSKY-NEXT:    bez32 a1, .LBB161_1
4812; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4813; CSKY-NEXT:    addi16 sp, sp, 8
4814; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4815; CSKY-NEXT:    ld16.w l0, (sp, 4)
4816; CSKY-NEXT:    ld16.w l1, (sp, 8)
4817; CSKY-NEXT:    ld16.w l2, (sp, 12)
4818; CSKY-NEXT:    addi16 sp, sp, 16
4819; CSKY-NEXT:    rts16
4820; CSKY-NEXT:    .p2align 1
4821; CSKY-NEXT:  # %bb.3:
4822; CSKY-NEXT:    .p2align 2
4823; CSKY-NEXT:  .LCPI161_0:
4824; CSKY-NEXT:    .long __atomic_compare_exchange_4
4825;
4826  %1 = atomicrmw umin i32* %a, i32 %b acquire
4827  ret i32 %1
4828}
4829
4830define i32 @atomicrmw_umin_i32_release(i32 *%a, i32 %b) nounwind {
4831; CSKY-LABEL: atomicrmw_umin_i32_release:
4832; CSKY:       # %bb.0:
4833; CSKY-NEXT:    subi16 sp, sp, 16
4834; CSKY-NEXT:    st16.w l2, (sp, 12)
4835; CSKY-NEXT:    st16.w l1, (sp, 8)
4836; CSKY-NEXT:    st16.w l0, (sp, 4)
4837; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4838; CSKY-NEXT:    subi16 sp, sp, 8
4839; CSKY-NEXT:    mov16 l0, a1
4840; CSKY-NEXT:    mov16 l1, a0
4841; CSKY-NEXT:    ld16.w a0, (a0, 0)
4842; CSKY-NEXT:    movi16 l2, 0
4843; CSKY-NEXT:  .LBB162_1: # %atomicrmw.start
4844; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4845; CSKY-NEXT:    cmphs16 l0, a0
4846; CSKY-NEXT:    mov16 a2, l0
4847; CSKY-NEXT:    movt32 a2, a0
4848; CSKY-NEXT:    st16.w a0, (sp, 4)
4849; CSKY-NEXT:    st16.w l2, (sp, 0)
4850; CSKY-NEXT:    mov16 a0, l1
4851; CSKY-NEXT:    addi16 a1, sp, 4
4852; CSKY-NEXT:    movi16 a3, 3
4853; CSKY-NEXT:    jsri32 [.LCPI162_0]
4854; CSKY-NEXT:    mov16 a1, a0
4855; CSKY-NEXT:    ld16.w a0, (sp, 4)
4856; CSKY-NEXT:    bez32 a1, .LBB162_1
4857; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4858; CSKY-NEXT:    addi16 sp, sp, 8
4859; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4860; CSKY-NEXT:    ld16.w l0, (sp, 4)
4861; CSKY-NEXT:    ld16.w l1, (sp, 8)
4862; CSKY-NEXT:    ld16.w l2, (sp, 12)
4863; CSKY-NEXT:    addi16 sp, sp, 16
4864; CSKY-NEXT:    rts16
4865; CSKY-NEXT:    .p2align 1
4866; CSKY-NEXT:  # %bb.3:
4867; CSKY-NEXT:    .p2align 2
4868; CSKY-NEXT:  .LCPI162_0:
4869; CSKY-NEXT:    .long __atomic_compare_exchange_4
4870;
4871  %1 = atomicrmw umin i32* %a, i32 %b release
4872  ret i32 %1
4873}
4874
4875define i32 @atomicrmw_umin_i32_acq_rel(i32 *%a, i32 %b) nounwind {
4876; CSKY-LABEL: atomicrmw_umin_i32_acq_rel:
4877; CSKY:       # %bb.0:
4878; CSKY-NEXT:    subi16 sp, sp, 16
4879; CSKY-NEXT:    st16.w l2, (sp, 12)
4880; CSKY-NEXT:    st16.w l1, (sp, 8)
4881; CSKY-NEXT:    st16.w l0, (sp, 4)
4882; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4883; CSKY-NEXT:    subi16 sp, sp, 8
4884; CSKY-NEXT:    mov16 l0, a1
4885; CSKY-NEXT:    mov16 l1, a0
4886; CSKY-NEXT:    ld16.w a0, (a0, 0)
4887; CSKY-NEXT:    movi16 l2, 2
4888; CSKY-NEXT:  .LBB163_1: # %atomicrmw.start
4889; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4890; CSKY-NEXT:    cmphs16 l0, a0
4891; CSKY-NEXT:    mov16 a2, l0
4892; CSKY-NEXT:    movt32 a2, a0
4893; CSKY-NEXT:    st16.w a0, (sp, 4)
4894; CSKY-NEXT:    st16.w l2, (sp, 0)
4895; CSKY-NEXT:    mov16 a0, l1
4896; CSKY-NEXT:    addi16 a1, sp, 4
4897; CSKY-NEXT:    movi16 a3, 4
4898; CSKY-NEXT:    jsri32 [.LCPI163_0]
4899; CSKY-NEXT:    mov16 a1, a0
4900; CSKY-NEXT:    ld16.w a0, (sp, 4)
4901; CSKY-NEXT:    bez32 a1, .LBB163_1
4902; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4903; CSKY-NEXT:    addi16 sp, sp, 8
4904; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4905; CSKY-NEXT:    ld16.w l0, (sp, 4)
4906; CSKY-NEXT:    ld16.w l1, (sp, 8)
4907; CSKY-NEXT:    ld16.w l2, (sp, 12)
4908; CSKY-NEXT:    addi16 sp, sp, 16
4909; CSKY-NEXT:    rts16
4910; CSKY-NEXT:    .p2align 1
4911; CSKY-NEXT:  # %bb.3:
4912; CSKY-NEXT:    .p2align 2
4913; CSKY-NEXT:  .LCPI163_0:
4914; CSKY-NEXT:    .long __atomic_compare_exchange_4
4915;
4916  %1 = atomicrmw umin i32* %a, i32 %b acq_rel
4917  ret i32 %1
4918}
4919
4920define i32 @atomicrmw_umin_i32_seq_cst(i32 *%a, i32 %b) nounwind {
4921; CSKY-LABEL: atomicrmw_umin_i32_seq_cst:
4922; CSKY:       # %bb.0:
4923; CSKY-NEXT:    subi16 sp, sp, 16
4924; CSKY-NEXT:    st16.w l2, (sp, 12)
4925; CSKY-NEXT:    st16.w l1, (sp, 8)
4926; CSKY-NEXT:    st16.w l0, (sp, 4)
4927; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4928; CSKY-NEXT:    subi16 sp, sp, 8
4929; CSKY-NEXT:    mov16 l0, a1
4930; CSKY-NEXT:    mov16 l1, a0
4931; CSKY-NEXT:    ld16.w a0, (a0, 0)
4932; CSKY-NEXT:    movi16 l2, 5
4933; CSKY-NEXT:  .LBB164_1: # %atomicrmw.start
4934; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
4935; CSKY-NEXT:    cmphs16 l0, a0
4936; CSKY-NEXT:    mov16 a2, l0
4937; CSKY-NEXT:    movt32 a2, a0
4938; CSKY-NEXT:    st16.w a0, (sp, 4)
4939; CSKY-NEXT:    st16.w l2, (sp, 0)
4940; CSKY-NEXT:    mov16 a0, l1
4941; CSKY-NEXT:    addi16 a1, sp, 4
4942; CSKY-NEXT:    movi16 a3, 5
4943; CSKY-NEXT:    jsri32 [.LCPI164_0]
4944; CSKY-NEXT:    mov16 a1, a0
4945; CSKY-NEXT:    ld16.w a0, (sp, 4)
4946; CSKY-NEXT:    bez32 a1, .LBB164_1
4947; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
4948; CSKY-NEXT:    addi16 sp, sp, 8
4949; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4950; CSKY-NEXT:    ld16.w l0, (sp, 4)
4951; CSKY-NEXT:    ld16.w l1, (sp, 8)
4952; CSKY-NEXT:    ld16.w l2, (sp, 12)
4953; CSKY-NEXT:    addi16 sp, sp, 16
4954; CSKY-NEXT:    rts16
4955; CSKY-NEXT:    .p2align 1
4956; CSKY-NEXT:  # %bb.3:
4957; CSKY-NEXT:    .p2align 2
4958; CSKY-NEXT:  .LCPI164_0:
4959; CSKY-NEXT:    .long __atomic_compare_exchange_4
4960;
4961  %1 = atomicrmw umin i32* %a, i32 %b seq_cst
4962  ret i32 %1
4963}
4964
4965define i64 @atomicrmw_xchg_i64_monotonic(i64* %a, i64 %b) nounwind {
4966; CSKY-LABEL: atomicrmw_xchg_i64_monotonic:
4967; CSKY:       # %bb.0:
4968; CSKY-NEXT:    subi16 sp, sp, 4
4969; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4970; CSKY-NEXT:    movi16 a3, 0
4971; CSKY-NEXT:    jsri32 [.LCPI165_0]
4972; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4973; CSKY-NEXT:    addi16 sp, sp, 4
4974; CSKY-NEXT:    rts16
4975; CSKY-NEXT:    .p2align 1
4976; CSKY-NEXT:  # %bb.1:
4977; CSKY-NEXT:    .p2align 2
4978; CSKY-NEXT:  .LCPI165_0:
4979; CSKY-NEXT:    .long __atomic_exchange_8
4980;
4981  %1 = atomicrmw xchg i64* %a, i64 %b monotonic
4982  ret i64 %1
4983}
4984
4985define i64 @atomicrmw_xchg_i64_acquire(i64* %a, i64 %b) nounwind {
4986; CSKY-LABEL: atomicrmw_xchg_i64_acquire:
4987; CSKY:       # %bb.0:
4988; CSKY-NEXT:    subi16 sp, sp, 4
4989; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
4990; CSKY-NEXT:    movi16 a3, 2
4991; CSKY-NEXT:    jsri32 [.LCPI166_0]
4992; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
4993; CSKY-NEXT:    addi16 sp, sp, 4
4994; CSKY-NEXT:    rts16
4995; CSKY-NEXT:    .p2align 1
4996; CSKY-NEXT:  # %bb.1:
4997; CSKY-NEXT:    .p2align 2
4998; CSKY-NEXT:  .LCPI166_0:
4999; CSKY-NEXT:    .long __atomic_exchange_8
5000;
5001  %1 = atomicrmw xchg i64* %a, i64 %b acquire
5002  ret i64 %1
5003}
5004
5005define i64 @atomicrmw_xchg_i64_release(i64* %a, i64 %b) nounwind {
5006; CSKY-LABEL: atomicrmw_xchg_i64_release:
5007; CSKY:       # %bb.0:
5008; CSKY-NEXT:    subi16 sp, sp, 4
5009; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5010; CSKY-NEXT:    movi16 a3, 3
5011; CSKY-NEXT:    jsri32 [.LCPI167_0]
5012; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5013; CSKY-NEXT:    addi16 sp, sp, 4
5014; CSKY-NEXT:    rts16
5015; CSKY-NEXT:    .p2align 1
5016; CSKY-NEXT:  # %bb.1:
5017; CSKY-NEXT:    .p2align 2
5018; CSKY-NEXT:  .LCPI167_0:
5019; CSKY-NEXT:    .long __atomic_exchange_8
5020;
5021  %1 = atomicrmw xchg i64* %a, i64 %b release
5022  ret i64 %1
5023}
5024
5025define i64 @atomicrmw_xchg_i64_acq_rel(i64* %a, i64 %b) nounwind {
5026; CSKY-LABEL: atomicrmw_xchg_i64_acq_rel:
5027; CSKY:       # %bb.0:
5028; CSKY-NEXT:    subi16 sp, sp, 4
5029; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5030; CSKY-NEXT:    movi16 a3, 4
5031; CSKY-NEXT:    jsri32 [.LCPI168_0]
5032; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5033; CSKY-NEXT:    addi16 sp, sp, 4
5034; CSKY-NEXT:    rts16
5035; CSKY-NEXT:    .p2align 1
5036; CSKY-NEXT:  # %bb.1:
5037; CSKY-NEXT:    .p2align 2
5038; CSKY-NEXT:  .LCPI168_0:
5039; CSKY-NEXT:    .long __atomic_exchange_8
5040;
5041  %1 = atomicrmw xchg i64* %a, i64 %b acq_rel
5042  ret i64 %1
5043}
5044
5045define i64 @atomicrmw_xchg_i64_seq_cst(i64* %a, i64 %b) nounwind {
5046; CSKY-LABEL: atomicrmw_xchg_i64_seq_cst:
5047; CSKY:       # %bb.0:
5048; CSKY-NEXT:    subi16 sp, sp, 4
5049; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5050; CSKY-NEXT:    movi16 a3, 5
5051; CSKY-NEXT:    jsri32 [.LCPI169_0]
5052; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5053; CSKY-NEXT:    addi16 sp, sp, 4
5054; CSKY-NEXT:    rts16
5055; CSKY-NEXT:    .p2align 1
5056; CSKY-NEXT:  # %bb.1:
5057; CSKY-NEXT:    .p2align 2
5058; CSKY-NEXT:  .LCPI169_0:
5059; CSKY-NEXT:    .long __atomic_exchange_8
5060;
5061  %1 = atomicrmw xchg i64* %a, i64 %b seq_cst
5062  ret i64 %1
5063}
5064
5065define i64 @atomicrmw_add_i64_monotonic(i64 *%a, i64 %b) nounwind {
5066; CSKY-LABEL: atomicrmw_add_i64_monotonic:
5067; CSKY:       # %bb.0:
5068; CSKY-NEXT:    subi16 sp, sp, 4
5069; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5070; CSKY-NEXT:    movi16 a3, 0
5071; CSKY-NEXT:    jsri32 [.LCPI170_0]
5072; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5073; CSKY-NEXT:    addi16 sp, sp, 4
5074; CSKY-NEXT:    rts16
5075; CSKY-NEXT:    .p2align 1
5076; CSKY-NEXT:  # %bb.1:
5077; CSKY-NEXT:    .p2align 2
5078; CSKY-NEXT:  .LCPI170_0:
5079; CSKY-NEXT:    .long __atomic_fetch_add_8
5080;
5081  %1 = atomicrmw add i64* %a, i64 %b monotonic
5082  ret i64 %1
5083}
5084
5085define i64 @atomicrmw_add_i64_acquire(i64 *%a, i64 %b) nounwind {
5086; CSKY-LABEL: atomicrmw_add_i64_acquire:
5087; CSKY:       # %bb.0:
5088; CSKY-NEXT:    subi16 sp, sp, 4
5089; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5090; CSKY-NEXT:    movi16 a3, 2
5091; CSKY-NEXT:    jsri32 [.LCPI171_0]
5092; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5093; CSKY-NEXT:    addi16 sp, sp, 4
5094; CSKY-NEXT:    rts16
5095; CSKY-NEXT:    .p2align 1
5096; CSKY-NEXT:  # %bb.1:
5097; CSKY-NEXT:    .p2align 2
5098; CSKY-NEXT:  .LCPI171_0:
5099; CSKY-NEXT:    .long __atomic_fetch_add_8
5100;
5101  %1 = atomicrmw add i64* %a, i64 %b acquire
5102  ret i64 %1
5103}
5104
5105define i64 @atomicrmw_add_i64_release(i64 *%a, i64 %b) nounwind {
5106; CSKY-LABEL: atomicrmw_add_i64_release:
5107; CSKY:       # %bb.0:
5108; CSKY-NEXT:    subi16 sp, sp, 4
5109; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5110; CSKY-NEXT:    movi16 a3, 3
5111; CSKY-NEXT:    jsri32 [.LCPI172_0]
5112; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5113; CSKY-NEXT:    addi16 sp, sp, 4
5114; CSKY-NEXT:    rts16
5115; CSKY-NEXT:    .p2align 1
5116; CSKY-NEXT:  # %bb.1:
5117; CSKY-NEXT:    .p2align 2
5118; CSKY-NEXT:  .LCPI172_0:
5119; CSKY-NEXT:    .long __atomic_fetch_add_8
5120;
5121  %1 = atomicrmw add i64* %a, i64 %b release
5122  ret i64 %1
5123}
5124
5125define i64 @atomicrmw_add_i64_acq_rel(i64 *%a, i64 %b) nounwind {
5126; CSKY-LABEL: atomicrmw_add_i64_acq_rel:
5127; CSKY:       # %bb.0:
5128; CSKY-NEXT:    subi16 sp, sp, 4
5129; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5130; CSKY-NEXT:    movi16 a3, 4
5131; CSKY-NEXT:    jsri32 [.LCPI173_0]
5132; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5133; CSKY-NEXT:    addi16 sp, sp, 4
5134; CSKY-NEXT:    rts16
5135; CSKY-NEXT:    .p2align 1
5136; CSKY-NEXT:  # %bb.1:
5137; CSKY-NEXT:    .p2align 2
5138; CSKY-NEXT:  .LCPI173_0:
5139; CSKY-NEXT:    .long __atomic_fetch_add_8
5140;
5141  %1 = atomicrmw add i64* %a, i64 %b acq_rel
5142  ret i64 %1
5143}
5144
5145define i64 @atomicrmw_add_i64_seq_cst(i64 *%a, i64 %b) nounwind {
5146; CSKY-LABEL: atomicrmw_add_i64_seq_cst:
5147; CSKY:       # %bb.0:
5148; CSKY-NEXT:    subi16 sp, sp, 4
5149; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5150; CSKY-NEXT:    movi16 a3, 5
5151; CSKY-NEXT:    jsri32 [.LCPI174_0]
5152; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5153; CSKY-NEXT:    addi16 sp, sp, 4
5154; CSKY-NEXT:    rts16
5155; CSKY-NEXT:    .p2align 1
5156; CSKY-NEXT:  # %bb.1:
5157; CSKY-NEXT:    .p2align 2
5158; CSKY-NEXT:  .LCPI174_0:
5159; CSKY-NEXT:    .long __atomic_fetch_add_8
5160;
5161  %1 = atomicrmw add i64* %a, i64 %b seq_cst
5162  ret i64 %1
5163}
5164
5165define i64 @atomicrmw_sub_i64_monotonic(i64* %a, i64 %b) nounwind {
5166; CSKY-LABEL: atomicrmw_sub_i64_monotonic:
5167; CSKY:       # %bb.0:
5168; CSKY-NEXT:    subi16 sp, sp, 4
5169; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5170; CSKY-NEXT:    movi16 a3, 0
5171; CSKY-NEXT:    jsri32 [.LCPI175_0]
5172; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5173; CSKY-NEXT:    addi16 sp, sp, 4
5174; CSKY-NEXT:    rts16
5175; CSKY-NEXT:    .p2align 1
5176; CSKY-NEXT:  # %bb.1:
5177; CSKY-NEXT:    .p2align 2
5178; CSKY-NEXT:  .LCPI175_0:
5179; CSKY-NEXT:    .long __atomic_fetch_sub_8
5180;
5181  %1 = atomicrmw sub i64* %a, i64 %b monotonic
5182  ret i64 %1
5183}
5184
5185define i64 @atomicrmw_sub_i64_acquire(i64* %a, i64 %b) nounwind {
5186; CSKY-LABEL: atomicrmw_sub_i64_acquire:
5187; CSKY:       # %bb.0:
5188; CSKY-NEXT:    subi16 sp, sp, 4
5189; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5190; CSKY-NEXT:    movi16 a3, 2
5191; CSKY-NEXT:    jsri32 [.LCPI176_0]
5192; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5193; CSKY-NEXT:    addi16 sp, sp, 4
5194; CSKY-NEXT:    rts16
5195; CSKY-NEXT:    .p2align 1
5196; CSKY-NEXT:  # %bb.1:
5197; CSKY-NEXT:    .p2align 2
5198; CSKY-NEXT:  .LCPI176_0:
5199; CSKY-NEXT:    .long __atomic_fetch_sub_8
5200;
5201  %1 = atomicrmw sub i64* %a, i64 %b acquire
5202  ret i64 %1
5203}
5204
5205define i64 @atomicrmw_sub_i64_release(i64* %a, i64 %b) nounwind {
5206; CSKY-LABEL: atomicrmw_sub_i64_release:
5207; CSKY:       # %bb.0:
5208; CSKY-NEXT:    subi16 sp, sp, 4
5209; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5210; CSKY-NEXT:    movi16 a3, 3
5211; CSKY-NEXT:    jsri32 [.LCPI177_0]
5212; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5213; CSKY-NEXT:    addi16 sp, sp, 4
5214; CSKY-NEXT:    rts16
5215; CSKY-NEXT:    .p2align 1
5216; CSKY-NEXT:  # %bb.1:
5217; CSKY-NEXT:    .p2align 2
5218; CSKY-NEXT:  .LCPI177_0:
5219; CSKY-NEXT:    .long __atomic_fetch_sub_8
5220;
5221  %1 = atomicrmw sub i64* %a, i64 %b release
5222  ret i64 %1
5223}
5224
5225define i64 @atomicrmw_sub_i64_acq_rel(i64* %a, i64 %b) nounwind {
5226; CSKY-LABEL: atomicrmw_sub_i64_acq_rel:
5227; CSKY:       # %bb.0:
5228; CSKY-NEXT:    subi16 sp, sp, 4
5229; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5230; CSKY-NEXT:    movi16 a3, 4
5231; CSKY-NEXT:    jsri32 [.LCPI178_0]
5232; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5233; CSKY-NEXT:    addi16 sp, sp, 4
5234; CSKY-NEXT:    rts16
5235; CSKY-NEXT:    .p2align 1
5236; CSKY-NEXT:  # %bb.1:
5237; CSKY-NEXT:    .p2align 2
5238; CSKY-NEXT:  .LCPI178_0:
5239; CSKY-NEXT:    .long __atomic_fetch_sub_8
5240;
5241  %1 = atomicrmw sub i64* %a, i64 %b acq_rel
5242  ret i64 %1
5243}
5244
5245define i64 @atomicrmw_sub_i64_seq_cst(i64* %a, i64 %b) nounwind {
5246; CSKY-LABEL: atomicrmw_sub_i64_seq_cst:
5247; CSKY:       # %bb.0:
5248; CSKY-NEXT:    subi16 sp, sp, 4
5249; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5250; CSKY-NEXT:    movi16 a3, 5
5251; CSKY-NEXT:    jsri32 [.LCPI179_0]
5252; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5253; CSKY-NEXT:    addi16 sp, sp, 4
5254; CSKY-NEXT:    rts16
5255; CSKY-NEXT:    .p2align 1
5256; CSKY-NEXT:  # %bb.1:
5257; CSKY-NEXT:    .p2align 2
5258; CSKY-NEXT:  .LCPI179_0:
5259; CSKY-NEXT:    .long __atomic_fetch_sub_8
5260;
5261  %1 = atomicrmw sub i64* %a, i64 %b seq_cst
5262  ret i64 %1
5263}
5264
5265define i64 @atomicrmw_and_i64_monotonic(i64 *%a, i64 %b) nounwind {
5266; CSKY-LABEL: atomicrmw_and_i64_monotonic:
5267; CSKY:       # %bb.0:
5268; CSKY-NEXT:    subi16 sp, sp, 4
5269; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5270; CSKY-NEXT:    movi16 a3, 0
5271; CSKY-NEXT:    jsri32 [.LCPI180_0]
5272; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5273; CSKY-NEXT:    addi16 sp, sp, 4
5274; CSKY-NEXT:    rts16
5275; CSKY-NEXT:    .p2align 1
5276; CSKY-NEXT:  # %bb.1:
5277; CSKY-NEXT:    .p2align 2
5278; CSKY-NEXT:  .LCPI180_0:
5279; CSKY-NEXT:    .long __atomic_fetch_and_8
5280;
5281  %1 = atomicrmw and i64* %a, i64 %b monotonic
5282  ret i64 %1
5283}
5284
5285define i64 @atomicrmw_and_i64_acquire(i64 *%a, i64 %b) nounwind {
5286; CSKY-LABEL: atomicrmw_and_i64_acquire:
5287; CSKY:       # %bb.0:
5288; CSKY-NEXT:    subi16 sp, sp, 4
5289; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5290; CSKY-NEXT:    movi16 a3, 2
5291; CSKY-NEXT:    jsri32 [.LCPI181_0]
5292; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5293; CSKY-NEXT:    addi16 sp, sp, 4
5294; CSKY-NEXT:    rts16
5295; CSKY-NEXT:    .p2align 1
5296; CSKY-NEXT:  # %bb.1:
5297; CSKY-NEXT:    .p2align 2
5298; CSKY-NEXT:  .LCPI181_0:
5299; CSKY-NEXT:    .long __atomic_fetch_and_8
5300;
5301  %1 = atomicrmw and i64* %a, i64 %b acquire
5302  ret i64 %1
5303}
5304
5305define i64 @atomicrmw_and_i64_release(i64 *%a, i64 %b) nounwind {
5306; CSKY-LABEL: atomicrmw_and_i64_release:
5307; CSKY:       # %bb.0:
5308; CSKY-NEXT:    subi16 sp, sp, 4
5309; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5310; CSKY-NEXT:    movi16 a3, 3
5311; CSKY-NEXT:    jsri32 [.LCPI182_0]
5312; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5313; CSKY-NEXT:    addi16 sp, sp, 4
5314; CSKY-NEXT:    rts16
5315; CSKY-NEXT:    .p2align 1
5316; CSKY-NEXT:  # %bb.1:
5317; CSKY-NEXT:    .p2align 2
5318; CSKY-NEXT:  .LCPI182_0:
5319; CSKY-NEXT:    .long __atomic_fetch_and_8
5320;
5321  %1 = atomicrmw and i64* %a, i64 %b release
5322  ret i64 %1
5323}
5324
5325define i64 @atomicrmw_and_i64_acq_rel(i64 *%a, i64 %b) nounwind {
5326; CSKY-LABEL: atomicrmw_and_i64_acq_rel:
5327; CSKY:       # %bb.0:
5328; CSKY-NEXT:    subi16 sp, sp, 4
5329; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5330; CSKY-NEXT:    movi16 a3, 4
5331; CSKY-NEXT:    jsri32 [.LCPI183_0]
5332; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5333; CSKY-NEXT:    addi16 sp, sp, 4
5334; CSKY-NEXT:    rts16
5335; CSKY-NEXT:    .p2align 1
5336; CSKY-NEXT:  # %bb.1:
5337; CSKY-NEXT:    .p2align 2
5338; CSKY-NEXT:  .LCPI183_0:
5339; CSKY-NEXT:    .long __atomic_fetch_and_8
5340;
5341  %1 = atomicrmw and i64* %a, i64 %b acq_rel
5342  ret i64 %1
5343}
5344
5345define i64 @atomicrmw_and_i64_seq_cst(i64 *%a, i64 %b) nounwind {
5346; CSKY-LABEL: atomicrmw_and_i64_seq_cst:
5347; CSKY:       # %bb.0:
5348; CSKY-NEXT:    subi16 sp, sp, 4
5349; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5350; CSKY-NEXT:    movi16 a3, 5
5351; CSKY-NEXT:    jsri32 [.LCPI184_0]
5352; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5353; CSKY-NEXT:    addi16 sp, sp, 4
5354; CSKY-NEXT:    rts16
5355; CSKY-NEXT:    .p2align 1
5356; CSKY-NEXT:  # %bb.1:
5357; CSKY-NEXT:    .p2align 2
5358; CSKY-NEXT:  .LCPI184_0:
5359; CSKY-NEXT:    .long __atomic_fetch_and_8
5360;
5361  %1 = atomicrmw and i64* %a, i64 %b seq_cst
5362  ret i64 %1
5363}
5364
5365define i64 @atomicrmw_nand_i64_monotonic(i64* %a, i64 %b) nounwind {
5366; CSKY-LABEL: atomicrmw_nand_i64_monotonic:
5367; CSKY:       # %bb.0:
5368; CSKY-NEXT:    subi16 sp, sp, 4
5369; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5370; CSKY-NEXT:    movi16 a3, 0
5371; CSKY-NEXT:    jsri32 [.LCPI185_0]
5372; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5373; CSKY-NEXT:    addi16 sp, sp, 4
5374; CSKY-NEXT:    rts16
5375; CSKY-NEXT:    .p2align 1
5376; CSKY-NEXT:  # %bb.1:
5377; CSKY-NEXT:    .p2align 2
5378; CSKY-NEXT:  .LCPI185_0:
5379; CSKY-NEXT:    .long __atomic_fetch_nand_8
5380;
5381  %1 = atomicrmw nand i64* %a, i64 %b monotonic
5382  ret i64 %1
5383}
5384
5385define i64 @atomicrmw_nand_i64_acquire(i64* %a, i64 %b) nounwind {
5386; CSKY-LABEL: atomicrmw_nand_i64_acquire:
5387; CSKY:       # %bb.0:
5388; CSKY-NEXT:    subi16 sp, sp, 4
5389; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5390; CSKY-NEXT:    movi16 a3, 2
5391; CSKY-NEXT:    jsri32 [.LCPI186_0]
5392; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5393; CSKY-NEXT:    addi16 sp, sp, 4
5394; CSKY-NEXT:    rts16
5395; CSKY-NEXT:    .p2align 1
5396; CSKY-NEXT:  # %bb.1:
5397; CSKY-NEXT:    .p2align 2
5398; CSKY-NEXT:  .LCPI186_0:
5399; CSKY-NEXT:    .long __atomic_fetch_nand_8
5400;
5401  %1 = atomicrmw nand i64* %a, i64 %b acquire
5402  ret i64 %1
5403}
5404
5405define i64 @atomicrmw_nand_i64_release(i64* %a, i64 %b) nounwind {
5406; CSKY-LABEL: atomicrmw_nand_i64_release:
5407; CSKY:       # %bb.0:
5408; CSKY-NEXT:    subi16 sp, sp, 4
5409; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5410; CSKY-NEXT:    movi16 a3, 3
5411; CSKY-NEXT:    jsri32 [.LCPI187_0]
5412; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5413; CSKY-NEXT:    addi16 sp, sp, 4
5414; CSKY-NEXT:    rts16
5415; CSKY-NEXT:    .p2align 1
5416; CSKY-NEXT:  # %bb.1:
5417; CSKY-NEXT:    .p2align 2
5418; CSKY-NEXT:  .LCPI187_0:
5419; CSKY-NEXT:    .long __atomic_fetch_nand_8
5420;
5421  %1 = atomicrmw nand i64* %a, i64 %b release
5422  ret i64 %1
5423}
5424
5425define i64 @atomicrmw_nand_i64_acq_rel(i64* %a, i64 %b) nounwind {
5426; CSKY-LABEL: atomicrmw_nand_i64_acq_rel:
5427; CSKY:       # %bb.0:
5428; CSKY-NEXT:    subi16 sp, sp, 4
5429; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5430; CSKY-NEXT:    movi16 a3, 4
5431; CSKY-NEXT:    jsri32 [.LCPI188_0]
5432; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5433; CSKY-NEXT:    addi16 sp, sp, 4
5434; CSKY-NEXT:    rts16
5435; CSKY-NEXT:    .p2align 1
5436; CSKY-NEXT:  # %bb.1:
5437; CSKY-NEXT:    .p2align 2
5438; CSKY-NEXT:  .LCPI188_0:
5439; CSKY-NEXT:    .long __atomic_fetch_nand_8
5440;
5441  %1 = atomicrmw nand i64* %a, i64 %b acq_rel
5442  ret i64 %1
5443}
5444
5445define i64 @atomicrmw_nand_i64_seq_cst(i64* %a, i64 %b) nounwind {
5446; CSKY-LABEL: atomicrmw_nand_i64_seq_cst:
5447; CSKY:       # %bb.0:
5448; CSKY-NEXT:    subi16 sp, sp, 4
5449; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5450; CSKY-NEXT:    movi16 a3, 5
5451; CSKY-NEXT:    jsri32 [.LCPI189_0]
5452; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5453; CSKY-NEXT:    addi16 sp, sp, 4
5454; CSKY-NEXT:    rts16
5455; CSKY-NEXT:    .p2align 1
5456; CSKY-NEXT:  # %bb.1:
5457; CSKY-NEXT:    .p2align 2
5458; CSKY-NEXT:  .LCPI189_0:
5459; CSKY-NEXT:    .long __atomic_fetch_nand_8
5460;
5461  %1 = atomicrmw nand i64* %a, i64 %b seq_cst
5462  ret i64 %1
5463}
5464
5465define i64 @atomicrmw_or_i64_monotonic(i64 *%a, i64 %b) nounwind {
5466; CSKY-LABEL: atomicrmw_or_i64_monotonic:
5467; CSKY:       # %bb.0:
5468; CSKY-NEXT:    subi16 sp, sp, 4
5469; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5470; CSKY-NEXT:    movi16 a3, 0
5471; CSKY-NEXT:    jsri32 [.LCPI190_0]
5472; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5473; CSKY-NEXT:    addi16 sp, sp, 4
5474; CSKY-NEXT:    rts16
5475; CSKY-NEXT:    .p2align 1
5476; CSKY-NEXT:  # %bb.1:
5477; CSKY-NEXT:    .p2align 2
5478; CSKY-NEXT:  .LCPI190_0:
5479; CSKY-NEXT:    .long __atomic_fetch_or_8
5480;
5481  %1 = atomicrmw or i64* %a, i64 %b monotonic
5482  ret i64 %1
5483}
5484
5485define i64 @atomicrmw_or_i64_acquire(i64 *%a, i64 %b) nounwind {
5486; CSKY-LABEL: atomicrmw_or_i64_acquire:
5487; CSKY:       # %bb.0:
5488; CSKY-NEXT:    subi16 sp, sp, 4
5489; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5490; CSKY-NEXT:    movi16 a3, 2
5491; CSKY-NEXT:    jsri32 [.LCPI191_0]
5492; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5493; CSKY-NEXT:    addi16 sp, sp, 4
5494; CSKY-NEXT:    rts16
5495; CSKY-NEXT:    .p2align 1
5496; CSKY-NEXT:  # %bb.1:
5497; CSKY-NEXT:    .p2align 2
5498; CSKY-NEXT:  .LCPI191_0:
5499; CSKY-NEXT:    .long __atomic_fetch_or_8
5500;
5501  %1 = atomicrmw or i64* %a, i64 %b acquire
5502  ret i64 %1
5503}
5504
5505define i64 @atomicrmw_or_i64_release(i64 *%a, i64 %b) nounwind {
5506; CSKY-LABEL: atomicrmw_or_i64_release:
5507; CSKY:       # %bb.0:
5508; CSKY-NEXT:    subi16 sp, sp, 4
5509; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5510; CSKY-NEXT:    movi16 a3, 3
5511; CSKY-NEXT:    jsri32 [.LCPI192_0]
5512; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5513; CSKY-NEXT:    addi16 sp, sp, 4
5514; CSKY-NEXT:    rts16
5515; CSKY-NEXT:    .p2align 1
5516; CSKY-NEXT:  # %bb.1:
5517; CSKY-NEXT:    .p2align 2
5518; CSKY-NEXT:  .LCPI192_0:
5519; CSKY-NEXT:    .long __atomic_fetch_or_8
5520;
5521  %1 = atomicrmw or i64* %a, i64 %b release
5522  ret i64 %1
5523}
5524
5525define i64 @atomicrmw_or_i64_acq_rel(i64 *%a, i64 %b) nounwind {
5526; CSKY-LABEL: atomicrmw_or_i64_acq_rel:
5527; CSKY:       # %bb.0:
5528; CSKY-NEXT:    subi16 sp, sp, 4
5529; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5530; CSKY-NEXT:    movi16 a3, 4
5531; CSKY-NEXT:    jsri32 [.LCPI193_0]
5532; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5533; CSKY-NEXT:    addi16 sp, sp, 4
5534; CSKY-NEXT:    rts16
5535; CSKY-NEXT:    .p2align 1
5536; CSKY-NEXT:  # %bb.1:
5537; CSKY-NEXT:    .p2align 2
5538; CSKY-NEXT:  .LCPI193_0:
5539; CSKY-NEXT:    .long __atomic_fetch_or_8
5540;
5541  %1 = atomicrmw or i64* %a, i64 %b acq_rel
5542  ret i64 %1
5543}
5544
5545define i64 @atomicrmw_or_i64_seq_cst(i64 *%a, i64 %b) nounwind {
5546; CSKY-LABEL: atomicrmw_or_i64_seq_cst:
5547; CSKY:       # %bb.0:
5548; CSKY-NEXT:    subi16 sp, sp, 4
5549; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5550; CSKY-NEXT:    movi16 a3, 5
5551; CSKY-NEXT:    jsri32 [.LCPI194_0]
5552; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5553; CSKY-NEXT:    addi16 sp, sp, 4
5554; CSKY-NEXT:    rts16
5555; CSKY-NEXT:    .p2align 1
5556; CSKY-NEXT:  # %bb.1:
5557; CSKY-NEXT:    .p2align 2
5558; CSKY-NEXT:  .LCPI194_0:
5559; CSKY-NEXT:    .long __atomic_fetch_or_8
5560;
5561  %1 = atomicrmw or i64* %a, i64 %b seq_cst
5562  ret i64 %1
5563}
5564
5565define i64 @atomicrmw_xor_i64_monotonic(i64 *%a, i64 %b) nounwind {
5566; CSKY-LABEL: atomicrmw_xor_i64_monotonic:
5567; CSKY:       # %bb.0:
5568; CSKY-NEXT:    subi16 sp, sp, 4
5569; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5570; CSKY-NEXT:    movi16 a3, 0
5571; CSKY-NEXT:    jsri32 [.LCPI195_0]
5572; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5573; CSKY-NEXT:    addi16 sp, sp, 4
5574; CSKY-NEXT:    rts16
5575; CSKY-NEXT:    .p2align 1
5576; CSKY-NEXT:  # %bb.1:
5577; CSKY-NEXT:    .p2align 2
5578; CSKY-NEXT:  .LCPI195_0:
5579; CSKY-NEXT:    .long __atomic_fetch_xor_8
5580;
5581  %1 = atomicrmw xor i64* %a, i64 %b monotonic
5582  ret i64 %1
5583}
5584
5585define i64 @atomicrmw_xor_i64_acquire(i64 *%a, i64 %b) nounwind {
5586; CSKY-LABEL: atomicrmw_xor_i64_acquire:
5587; CSKY:       # %bb.0:
5588; CSKY-NEXT:    subi16 sp, sp, 4
5589; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5590; CSKY-NEXT:    movi16 a3, 2
5591; CSKY-NEXT:    jsri32 [.LCPI196_0]
5592; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5593; CSKY-NEXT:    addi16 sp, sp, 4
5594; CSKY-NEXT:    rts16
5595; CSKY-NEXT:    .p2align 1
5596; CSKY-NEXT:  # %bb.1:
5597; CSKY-NEXT:    .p2align 2
5598; CSKY-NEXT:  .LCPI196_0:
5599; CSKY-NEXT:    .long __atomic_fetch_xor_8
5600;
5601  %1 = atomicrmw xor i64* %a, i64 %b acquire
5602  ret i64 %1
5603}
5604
5605define i64 @atomicrmw_xor_i64_release(i64 *%a, i64 %b) nounwind {
5606; CSKY-LABEL: atomicrmw_xor_i64_release:
5607; CSKY:       # %bb.0:
5608; CSKY-NEXT:    subi16 sp, sp, 4
5609; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5610; CSKY-NEXT:    movi16 a3, 3
5611; CSKY-NEXT:    jsri32 [.LCPI197_0]
5612; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5613; CSKY-NEXT:    addi16 sp, sp, 4
5614; CSKY-NEXT:    rts16
5615; CSKY-NEXT:    .p2align 1
5616; CSKY-NEXT:  # %bb.1:
5617; CSKY-NEXT:    .p2align 2
5618; CSKY-NEXT:  .LCPI197_0:
5619; CSKY-NEXT:    .long __atomic_fetch_xor_8
5620;
5621  %1 = atomicrmw xor i64* %a, i64 %b release
5622  ret i64 %1
5623}
5624
5625define i64 @atomicrmw_xor_i64_acq_rel(i64 *%a, i64 %b) nounwind {
5626; CSKY-LABEL: atomicrmw_xor_i64_acq_rel:
5627; CSKY:       # %bb.0:
5628; CSKY-NEXT:    subi16 sp, sp, 4
5629; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5630; CSKY-NEXT:    movi16 a3, 4
5631; CSKY-NEXT:    jsri32 [.LCPI198_0]
5632; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5633; CSKY-NEXT:    addi16 sp, sp, 4
5634; CSKY-NEXT:    rts16
5635; CSKY-NEXT:    .p2align 1
5636; CSKY-NEXT:  # %bb.1:
5637; CSKY-NEXT:    .p2align 2
5638; CSKY-NEXT:  .LCPI198_0:
5639; CSKY-NEXT:    .long __atomic_fetch_xor_8
5640;
5641  %1 = atomicrmw xor i64* %a, i64 %b acq_rel
5642  ret i64 %1
5643}
5644
5645define i64 @atomicrmw_xor_i64_seq_cst(i64 *%a, i64 %b) nounwind {
5646; CSKY-LABEL: atomicrmw_xor_i64_seq_cst:
5647; CSKY:       # %bb.0:
5648; CSKY-NEXT:    subi16 sp, sp, 4
5649; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5650; CSKY-NEXT:    movi16 a3, 5
5651; CSKY-NEXT:    jsri32 [.LCPI199_0]
5652; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5653; CSKY-NEXT:    addi16 sp, sp, 4
5654; CSKY-NEXT:    rts16
5655; CSKY-NEXT:    .p2align 1
5656; CSKY-NEXT:  # %bb.1:
5657; CSKY-NEXT:    .p2align 2
5658; CSKY-NEXT:  .LCPI199_0:
5659; CSKY-NEXT:    .long __atomic_fetch_xor_8
5660;
5661  %1 = atomicrmw xor i64* %a, i64 %b seq_cst
5662  ret i64 %1
5663}
5664
5665define i64 @atomicrmw_max_i64_monotonic(i64 *%a, i64 %b) nounwind {
5666; CSKY-LABEL: atomicrmw_max_i64_monotonic:
5667; CSKY:       # %bb.0:
5668; CSKY-NEXT:    subi16 sp, sp, 20
5669; CSKY-NEXT:    st16.w l3, (sp, 16)
5670; CSKY-NEXT:    st16.w l2, (sp, 12)
5671; CSKY-NEXT:    st16.w l1, (sp, 8)
5672; CSKY-NEXT:    st16.w l0, (sp, 4)
5673; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5674; CSKY-NEXT:    subi16 sp, sp, 28
5675; CSKY-NEXT:    mov16 l0, a2
5676; CSKY-NEXT:    mov16 l1, a1
5677; CSKY-NEXT:    mov16 l2, a0
5678; CSKY-NEXT:    ld16.w a1, (a0, 4)
5679; CSKY-NEXT:    ld16.w a0, (a0, 0)
5680; CSKY-NEXT:    movi16 l3, 0
5681; CSKY-NEXT:  .LBB200_1: # %atomicrmw.start
5682; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
5683; CSKY-NEXT:    cmplt16 l0, a1
5684; CSKY-NEXT:    mvc32 a2
5685; CSKY-NEXT:    st16.w a2, (sp, 12)
5686; CSKY-NEXT:    cmpne16 a1, l0
5687; CSKY-NEXT:    mvc32 a2
5688; CSKY-NEXT:    st16.w a2, (sp, 16)
5689; CSKY-NEXT:    cmphs16 l1, a0
5690; CSKY-NEXT:    mvcv16 a2
5691; CSKY-NEXT:    ld16.w a3, (sp, 12)
5692; CSKY-NEXT:    btsti32 a3, 0
5693; CSKY-NEXT:    mvc32 a3
5694; CSKY-NEXT:    ld32.w t0, (sp, 16)
5695; CSKY-NEXT:    btsti32 t0, 0
5696; CSKY-NEXT:    movf32 a3, a2
5697; CSKY-NEXT:    btsti32 a3, 0
5698; CSKY-NEXT:    mov16 a2, l1
5699; CSKY-NEXT:    movt32 a2, a0
5700; CSKY-NEXT:    mov16 a3, l0
5701; CSKY-NEXT:    movt32 a3, a1
5702; CSKY-NEXT:    st16.w a0, (sp, 20)
5703; CSKY-NEXT:    st16.w a1, (sp, 24)
5704; CSKY-NEXT:    st16.w l3, (sp, 4)
5705; CSKY-NEXT:    st16.w l3, (sp, 0)
5706; CSKY-NEXT:    mov16 a0, l2
5707; CSKY-NEXT:    addi16 a1, sp, 20
5708; CSKY-NEXT:    jsri32 [.LCPI200_0]
5709; CSKY-NEXT:    mov16 a2, a0
5710; CSKY-NEXT:    ld16.w a1, (sp, 24)
5711; CSKY-NEXT:    ld16.w a0, (sp, 20)
5712; CSKY-NEXT:    bez32 a2, .LBB200_1
5713; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
5714; CSKY-NEXT:    addi16 sp, sp, 28
5715; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5716; CSKY-NEXT:    ld16.w l0, (sp, 4)
5717; CSKY-NEXT:    ld16.w l1, (sp, 8)
5718; CSKY-NEXT:    ld16.w l2, (sp, 12)
5719; CSKY-NEXT:    ld16.w l3, (sp, 16)
5720; CSKY-NEXT:    addi16 sp, sp, 20
5721; CSKY-NEXT:    rts16
5722; CSKY-NEXT:    .p2align 1
5723; CSKY-NEXT:  # %bb.3:
5724; CSKY-NEXT:    .p2align 2
5725; CSKY-NEXT:  .LCPI200_0:
5726; CSKY-NEXT:    .long __atomic_compare_exchange_8
5727;
5728  %1 = atomicrmw max i64* %a, i64 %b monotonic
5729  ret i64 %1
5730}
5731
5732define i64 @atomicrmw_max_i64_acquire(i64 *%a, i64 %b) nounwind {
5733; CSKY-LABEL: atomicrmw_max_i64_acquire:
5734; CSKY:       # %bb.0:
5735; CSKY-NEXT:    subi16 sp, sp, 20
5736; CSKY-NEXT:    st16.w l3, (sp, 16)
5737; CSKY-NEXT:    st16.w l2, (sp, 12)
5738; CSKY-NEXT:    st16.w l1, (sp, 8)
5739; CSKY-NEXT:    st16.w l0, (sp, 4)
5740; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5741; CSKY-NEXT:    subi16 sp, sp, 28
5742; CSKY-NEXT:    mov16 l0, a2
5743; CSKY-NEXT:    mov16 l1, a1
5744; CSKY-NEXT:    mov16 l2, a0
5745; CSKY-NEXT:    ld16.w a1, (a0, 4)
5746; CSKY-NEXT:    ld16.w a0, (a0, 0)
5747; CSKY-NEXT:    movi16 l3, 2
5748; CSKY-NEXT:  .LBB201_1: # %atomicrmw.start
5749; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
5750; CSKY-NEXT:    cmplt16 l0, a1
5751; CSKY-NEXT:    mvc32 a2
5752; CSKY-NEXT:    st16.w a2, (sp, 12)
5753; CSKY-NEXT:    cmpne16 a1, l0
5754; CSKY-NEXT:    mvc32 a2
5755; CSKY-NEXT:    st16.w a2, (sp, 16)
5756; CSKY-NEXT:    cmphs16 l1, a0
5757; CSKY-NEXT:    mvcv16 a2
5758; CSKY-NEXT:    ld16.w a3, (sp, 12)
5759; CSKY-NEXT:    btsti32 a3, 0
5760; CSKY-NEXT:    mvc32 a3
5761; CSKY-NEXT:    ld32.w t0, (sp, 16)
5762; CSKY-NEXT:    btsti32 t0, 0
5763; CSKY-NEXT:    movf32 a3, a2
5764; CSKY-NEXT:    btsti32 a3, 0
5765; CSKY-NEXT:    mov16 a2, l1
5766; CSKY-NEXT:    movt32 a2, a0
5767; CSKY-NEXT:    mov16 a3, l0
5768; CSKY-NEXT:    movt32 a3, a1
5769; CSKY-NEXT:    st16.w a0, (sp, 20)
5770; CSKY-NEXT:    st16.w a1, (sp, 24)
5771; CSKY-NEXT:    st16.w l3, (sp, 4)
5772; CSKY-NEXT:    st16.w l3, (sp, 0)
5773; CSKY-NEXT:    mov16 a0, l2
5774; CSKY-NEXT:    addi16 a1, sp, 20
5775; CSKY-NEXT:    jsri32 [.LCPI201_0]
5776; CSKY-NEXT:    mov16 a2, a0
5777; CSKY-NEXT:    ld16.w a1, (sp, 24)
5778; CSKY-NEXT:    ld16.w a0, (sp, 20)
5779; CSKY-NEXT:    bez32 a2, .LBB201_1
5780; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
5781; CSKY-NEXT:    addi16 sp, sp, 28
5782; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5783; CSKY-NEXT:    ld16.w l0, (sp, 4)
5784; CSKY-NEXT:    ld16.w l1, (sp, 8)
5785; CSKY-NEXT:    ld16.w l2, (sp, 12)
5786; CSKY-NEXT:    ld16.w l3, (sp, 16)
5787; CSKY-NEXT:    addi16 sp, sp, 20
5788; CSKY-NEXT:    rts16
5789; CSKY-NEXT:    .p2align 1
5790; CSKY-NEXT:  # %bb.3:
5791; CSKY-NEXT:    .p2align 2
5792; CSKY-NEXT:  .LCPI201_0:
5793; CSKY-NEXT:    .long __atomic_compare_exchange_8
5794;
5795  %1 = atomicrmw max i64* %a, i64 %b acquire
5796  ret i64 %1
5797}
5798
5799define i64 @atomicrmw_max_i64_release(i64 *%a, i64 %b) nounwind {
5800; CSKY-LABEL: atomicrmw_max_i64_release:
5801; CSKY:       # %bb.0:
5802; CSKY-NEXT:    subi16 sp, sp, 24
5803; CSKY-NEXT:    st16.w l3, (sp, 20)
5804; CSKY-NEXT:    st16.w l2, (sp, 16)
5805; CSKY-NEXT:    st16.w l1, (sp, 12)
5806; CSKY-NEXT:    st16.w l0, (sp, 8)
5807; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
5808; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
5809; CSKY-NEXT:    subi16 sp, sp, 28
5810; CSKY-NEXT:    mov16 l0, a2
5811; CSKY-NEXT:    mov16 l1, a1
5812; CSKY-NEXT:    mov16 l2, a0
5813; CSKY-NEXT:    ld16.w a1, (a0, 4)
5814; CSKY-NEXT:    ld16.w a0, (a0, 0)
5815; CSKY-NEXT:    movi16 l3, 0
5816; CSKY-NEXT:    movi32 l4, 3
5817; CSKY-NEXT:  .LBB202_1: # %atomicrmw.start
5818; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
5819; CSKY-NEXT:    cmplt16 l0, a1
5820; CSKY-NEXT:    mvc32 a2
5821; CSKY-NEXT:    st16.w a2, (sp, 12)
5822; CSKY-NEXT:    cmpne16 a1, l0
5823; CSKY-NEXT:    mvc32 a2
5824; CSKY-NEXT:    st16.w a2, (sp, 16)
5825; CSKY-NEXT:    cmphs16 l1, a0
5826; CSKY-NEXT:    mvcv16 a2
5827; CSKY-NEXT:    ld16.w a3, (sp, 12)
5828; CSKY-NEXT:    btsti32 a3, 0
5829; CSKY-NEXT:    mvc32 a3
5830; CSKY-NEXT:    ld32.w t0, (sp, 16)
5831; CSKY-NEXT:    btsti32 t0, 0
5832; CSKY-NEXT:    movf32 a3, a2
5833; CSKY-NEXT:    btsti32 a3, 0
5834; CSKY-NEXT:    mov16 a2, l1
5835; CSKY-NEXT:    movt32 a2, a0
5836; CSKY-NEXT:    mov16 a3, l0
5837; CSKY-NEXT:    movt32 a3, a1
5838; CSKY-NEXT:    st16.w a0, (sp, 20)
5839; CSKY-NEXT:    st16.w a1, (sp, 24)
5840; CSKY-NEXT:    st16.w l3, (sp, 4)
5841; CSKY-NEXT:    st32.w l4, (sp, 0)
5842; CSKY-NEXT:    mov16 a0, l2
5843; CSKY-NEXT:    addi16 a1, sp, 20
5844; CSKY-NEXT:    jsri32 [.LCPI202_0]
5845; CSKY-NEXT:    mov16 a2, a0
5846; CSKY-NEXT:    ld16.w a1, (sp, 24)
5847; CSKY-NEXT:    ld16.w a0, (sp, 20)
5848; CSKY-NEXT:    bez32 a2, .LBB202_1
5849; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
5850; CSKY-NEXT:    addi16 sp, sp, 28
5851; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
5852; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
5853; CSKY-NEXT:    ld16.w l0, (sp, 8)
5854; CSKY-NEXT:    ld16.w l1, (sp, 12)
5855; CSKY-NEXT:    ld16.w l2, (sp, 16)
5856; CSKY-NEXT:    ld16.w l3, (sp, 20)
5857; CSKY-NEXT:    addi16 sp, sp, 24
5858; CSKY-NEXT:    rts16
5859; CSKY-NEXT:    .p2align 1
5860; CSKY-NEXT:  # %bb.3:
5861; CSKY-NEXT:    .p2align 2
5862; CSKY-NEXT:  .LCPI202_0:
5863; CSKY-NEXT:    .long __atomic_compare_exchange_8
5864;
5865  %1 = atomicrmw max i64* %a, i64 %b release
5866  ret i64 %1
5867}
5868
5869define i64 @atomicrmw_max_i64_acq_rel(i64 *%a, i64 %b) nounwind {
5870; CSKY-LABEL: atomicrmw_max_i64_acq_rel:
5871; CSKY:       # %bb.0:
5872; CSKY-NEXT:    subi16 sp, sp, 24
5873; CSKY-NEXT:    st16.w l3, (sp, 20)
5874; CSKY-NEXT:    st16.w l2, (sp, 16)
5875; CSKY-NEXT:    st16.w l1, (sp, 12)
5876; CSKY-NEXT:    st16.w l0, (sp, 8)
5877; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
5878; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
5879; CSKY-NEXT:    subi16 sp, sp, 28
5880; CSKY-NEXT:    mov16 l0, a2
5881; CSKY-NEXT:    mov16 l1, a1
5882; CSKY-NEXT:    mov16 l2, a0
5883; CSKY-NEXT:    ld16.w a1, (a0, 4)
5884; CSKY-NEXT:    ld16.w a0, (a0, 0)
5885; CSKY-NEXT:    movi16 l3, 2
5886; CSKY-NEXT:    movi32 l4, 4
5887; CSKY-NEXT:  .LBB203_1: # %atomicrmw.start
5888; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
5889; CSKY-NEXT:    cmplt16 l0, a1
5890; CSKY-NEXT:    mvc32 a2
5891; CSKY-NEXT:    st16.w a2, (sp, 12)
5892; CSKY-NEXT:    cmpne16 a1, l0
5893; CSKY-NEXT:    mvc32 a2
5894; CSKY-NEXT:    st16.w a2, (sp, 16)
5895; CSKY-NEXT:    cmphs16 l1, a0
5896; CSKY-NEXT:    mvcv16 a2
5897; CSKY-NEXT:    ld16.w a3, (sp, 12)
5898; CSKY-NEXT:    btsti32 a3, 0
5899; CSKY-NEXT:    mvc32 a3
5900; CSKY-NEXT:    ld32.w t0, (sp, 16)
5901; CSKY-NEXT:    btsti32 t0, 0
5902; CSKY-NEXT:    movf32 a3, a2
5903; CSKY-NEXT:    btsti32 a3, 0
5904; CSKY-NEXT:    mov16 a2, l1
5905; CSKY-NEXT:    movt32 a2, a0
5906; CSKY-NEXT:    mov16 a3, l0
5907; CSKY-NEXT:    movt32 a3, a1
5908; CSKY-NEXT:    st16.w a0, (sp, 20)
5909; CSKY-NEXT:    st16.w a1, (sp, 24)
5910; CSKY-NEXT:    st16.w l3, (sp, 4)
5911; CSKY-NEXT:    st32.w l4, (sp, 0)
5912; CSKY-NEXT:    mov16 a0, l2
5913; CSKY-NEXT:    addi16 a1, sp, 20
5914; CSKY-NEXT:    jsri32 [.LCPI203_0]
5915; CSKY-NEXT:    mov16 a2, a0
5916; CSKY-NEXT:    ld16.w a1, (sp, 24)
5917; CSKY-NEXT:    ld16.w a0, (sp, 20)
5918; CSKY-NEXT:    bez32 a2, .LBB203_1
5919; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
5920; CSKY-NEXT:    addi16 sp, sp, 28
5921; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
5922; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
5923; CSKY-NEXT:    ld16.w l0, (sp, 8)
5924; CSKY-NEXT:    ld16.w l1, (sp, 12)
5925; CSKY-NEXT:    ld16.w l2, (sp, 16)
5926; CSKY-NEXT:    ld16.w l3, (sp, 20)
5927; CSKY-NEXT:    addi16 sp, sp, 24
5928; CSKY-NEXT:    rts16
5929; CSKY-NEXT:    .p2align 1
5930; CSKY-NEXT:  # %bb.3:
5931; CSKY-NEXT:    .p2align 2
5932; CSKY-NEXT:  .LCPI203_0:
5933; CSKY-NEXT:    .long __atomic_compare_exchange_8
5934;
5935  %1 = atomicrmw max i64* %a, i64 %b acq_rel
5936  ret i64 %1
5937}
5938
5939define i64 @atomicrmw_max_i64_seq_cst(i64 *%a, i64 %b) nounwind {
5940; CSKY-LABEL: atomicrmw_max_i64_seq_cst:
5941; CSKY:       # %bb.0:
5942; CSKY-NEXT:    subi16 sp, sp, 20
5943; CSKY-NEXT:    st16.w l3, (sp, 16)
5944; CSKY-NEXT:    st16.w l2, (sp, 12)
5945; CSKY-NEXT:    st16.w l1, (sp, 8)
5946; CSKY-NEXT:    st16.w l0, (sp, 4)
5947; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
5948; CSKY-NEXT:    subi16 sp, sp, 28
5949; CSKY-NEXT:    mov16 l0, a2
5950; CSKY-NEXT:    mov16 l1, a1
5951; CSKY-NEXT:    mov16 l2, a0
5952; CSKY-NEXT:    ld16.w a1, (a0, 4)
5953; CSKY-NEXT:    ld16.w a0, (a0, 0)
5954; CSKY-NEXT:    movi16 l3, 5
5955; CSKY-NEXT:  .LBB204_1: # %atomicrmw.start
5956; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
5957; CSKY-NEXT:    cmplt16 l0, a1
5958; CSKY-NEXT:    mvc32 a2
5959; CSKY-NEXT:    st16.w a2, (sp, 12)
5960; CSKY-NEXT:    cmpne16 a1, l0
5961; CSKY-NEXT:    mvc32 a2
5962; CSKY-NEXT:    st16.w a2, (sp, 16)
5963; CSKY-NEXT:    cmphs16 l1, a0
5964; CSKY-NEXT:    mvcv16 a2
5965; CSKY-NEXT:    ld16.w a3, (sp, 12)
5966; CSKY-NEXT:    btsti32 a3, 0
5967; CSKY-NEXT:    mvc32 a3
5968; CSKY-NEXT:    ld32.w t0, (sp, 16)
5969; CSKY-NEXT:    btsti32 t0, 0
5970; CSKY-NEXT:    movf32 a3, a2
5971; CSKY-NEXT:    btsti32 a3, 0
5972; CSKY-NEXT:    mov16 a2, l1
5973; CSKY-NEXT:    movt32 a2, a0
5974; CSKY-NEXT:    mov16 a3, l0
5975; CSKY-NEXT:    movt32 a3, a1
5976; CSKY-NEXT:    st16.w a0, (sp, 20)
5977; CSKY-NEXT:    st16.w a1, (sp, 24)
5978; CSKY-NEXT:    st16.w l3, (sp, 4)
5979; CSKY-NEXT:    st16.w l3, (sp, 0)
5980; CSKY-NEXT:    mov16 a0, l2
5981; CSKY-NEXT:    addi16 a1, sp, 20
5982; CSKY-NEXT:    jsri32 [.LCPI204_0]
5983; CSKY-NEXT:    mov16 a2, a0
5984; CSKY-NEXT:    ld16.w a1, (sp, 24)
5985; CSKY-NEXT:    ld16.w a0, (sp, 20)
5986; CSKY-NEXT:    bez32 a2, .LBB204_1
5987; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
5988; CSKY-NEXT:    addi16 sp, sp, 28
5989; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
5990; CSKY-NEXT:    ld16.w l0, (sp, 4)
5991; CSKY-NEXT:    ld16.w l1, (sp, 8)
5992; CSKY-NEXT:    ld16.w l2, (sp, 12)
5993; CSKY-NEXT:    ld16.w l3, (sp, 16)
5994; CSKY-NEXT:    addi16 sp, sp, 20
5995; CSKY-NEXT:    rts16
5996; CSKY-NEXT:    .p2align 1
5997; CSKY-NEXT:  # %bb.3:
5998; CSKY-NEXT:    .p2align 2
5999; CSKY-NEXT:  .LCPI204_0:
6000; CSKY-NEXT:    .long __atomic_compare_exchange_8
6001;
6002  %1 = atomicrmw max i64* %a, i64 %b seq_cst
6003  ret i64 %1
6004}
6005
6006define i64 @atomicrmw_min_i64_monotonic(i64 *%a, i64 %b) nounwind {
6007; CSKY-LABEL: atomicrmw_min_i64_monotonic:
6008; CSKY:       # %bb.0:
6009; CSKY-NEXT:    subi16 sp, sp, 20
6010; CSKY-NEXT:    st16.w l3, (sp, 16)
6011; CSKY-NEXT:    st16.w l2, (sp, 12)
6012; CSKY-NEXT:    st16.w l1, (sp, 8)
6013; CSKY-NEXT:    st16.w l0, (sp, 4)
6014; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6015; CSKY-NEXT:    subi16 sp, sp, 28
6016; CSKY-NEXT:    mov16 l0, a2
6017; CSKY-NEXT:    mov16 l1, a1
6018; CSKY-NEXT:    mov16 l2, a0
6019; CSKY-NEXT:    ld16.w a1, (a0, 4)
6020; CSKY-NEXT:    ld16.w a0, (a0, 0)
6021; CSKY-NEXT:    movi16 l3, 0
6022; CSKY-NEXT:  .LBB205_1: # %atomicrmw.start
6023; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6024; CSKY-NEXT:    cmphs16 l1, a0
6025; CSKY-NEXT:    mvc32 a2
6026; CSKY-NEXT:    st16.w a2, (sp, 12)
6027; CSKY-NEXT:    cmpne16 a1, l0
6028; CSKY-NEXT:    mvc32 a2
6029; CSKY-NEXT:    st16.w a2, (sp, 16)
6030; CSKY-NEXT:    cmplt16 l0, a1
6031; CSKY-NEXT:    mvcv16 a2
6032; CSKY-NEXT:    ld16.w a3, (sp, 12)
6033; CSKY-NEXT:    btsti32 a3, 0
6034; CSKY-NEXT:    mvc32 a3
6035; CSKY-NEXT:    ld32.w t0, (sp, 16)
6036; CSKY-NEXT:    btsti32 t0, 0
6037; CSKY-NEXT:    movf32 a2, a3
6038; CSKY-NEXT:    btsti32 a2, 0
6039; CSKY-NEXT:    mov16 a2, l1
6040; CSKY-NEXT:    movt32 a2, a0
6041; CSKY-NEXT:    mov16 a3, l0
6042; CSKY-NEXT:    movt32 a3, a1
6043; CSKY-NEXT:    st16.w a0, (sp, 20)
6044; CSKY-NEXT:    st16.w a1, (sp, 24)
6045; CSKY-NEXT:    st16.w l3, (sp, 4)
6046; CSKY-NEXT:    st16.w l3, (sp, 0)
6047; CSKY-NEXT:    mov16 a0, l2
6048; CSKY-NEXT:    addi16 a1, sp, 20
6049; CSKY-NEXT:    jsri32 [.LCPI205_0]
6050; CSKY-NEXT:    mov16 a2, a0
6051; CSKY-NEXT:    ld16.w a1, (sp, 24)
6052; CSKY-NEXT:    ld16.w a0, (sp, 20)
6053; CSKY-NEXT:    bez32 a2, .LBB205_1
6054; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6055; CSKY-NEXT:    addi16 sp, sp, 28
6056; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6057; CSKY-NEXT:    ld16.w l0, (sp, 4)
6058; CSKY-NEXT:    ld16.w l1, (sp, 8)
6059; CSKY-NEXT:    ld16.w l2, (sp, 12)
6060; CSKY-NEXT:    ld16.w l3, (sp, 16)
6061; CSKY-NEXT:    addi16 sp, sp, 20
6062; CSKY-NEXT:    rts16
6063; CSKY-NEXT:    .p2align 1
6064; CSKY-NEXT:  # %bb.3:
6065; CSKY-NEXT:    .p2align 2
6066; CSKY-NEXT:  .LCPI205_0:
6067; CSKY-NEXT:    .long __atomic_compare_exchange_8
6068;
6069  %1 = atomicrmw min i64* %a, i64 %b monotonic
6070  ret i64 %1
6071}
6072
6073define i64 @atomicrmw_min_i64_acquire(i64 *%a, i64 %b) nounwind {
6074; CSKY-LABEL: atomicrmw_min_i64_acquire:
6075; CSKY:       # %bb.0:
6076; CSKY-NEXT:    subi16 sp, sp, 20
6077; CSKY-NEXT:    st16.w l3, (sp, 16)
6078; CSKY-NEXT:    st16.w l2, (sp, 12)
6079; CSKY-NEXT:    st16.w l1, (sp, 8)
6080; CSKY-NEXT:    st16.w l0, (sp, 4)
6081; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6082; CSKY-NEXT:    subi16 sp, sp, 28
6083; CSKY-NEXT:    mov16 l0, a2
6084; CSKY-NEXT:    mov16 l1, a1
6085; CSKY-NEXT:    mov16 l2, a0
6086; CSKY-NEXT:    ld16.w a1, (a0, 4)
6087; CSKY-NEXT:    ld16.w a0, (a0, 0)
6088; CSKY-NEXT:    movi16 l3, 2
6089; CSKY-NEXT:  .LBB206_1: # %atomicrmw.start
6090; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6091; CSKY-NEXT:    cmphs16 l1, a0
6092; CSKY-NEXT:    mvc32 a2
6093; CSKY-NEXT:    st16.w a2, (sp, 12)
6094; CSKY-NEXT:    cmpne16 a1, l0
6095; CSKY-NEXT:    mvc32 a2
6096; CSKY-NEXT:    st16.w a2, (sp, 16)
6097; CSKY-NEXT:    cmplt16 l0, a1
6098; CSKY-NEXT:    mvcv16 a2
6099; CSKY-NEXT:    ld16.w a3, (sp, 12)
6100; CSKY-NEXT:    btsti32 a3, 0
6101; CSKY-NEXT:    mvc32 a3
6102; CSKY-NEXT:    ld32.w t0, (sp, 16)
6103; CSKY-NEXT:    btsti32 t0, 0
6104; CSKY-NEXT:    movf32 a2, a3
6105; CSKY-NEXT:    btsti32 a2, 0
6106; CSKY-NEXT:    mov16 a2, l1
6107; CSKY-NEXT:    movt32 a2, a0
6108; CSKY-NEXT:    mov16 a3, l0
6109; CSKY-NEXT:    movt32 a3, a1
6110; CSKY-NEXT:    st16.w a0, (sp, 20)
6111; CSKY-NEXT:    st16.w a1, (sp, 24)
6112; CSKY-NEXT:    st16.w l3, (sp, 4)
6113; CSKY-NEXT:    st16.w l3, (sp, 0)
6114; CSKY-NEXT:    mov16 a0, l2
6115; CSKY-NEXT:    addi16 a1, sp, 20
6116; CSKY-NEXT:    jsri32 [.LCPI206_0]
6117; CSKY-NEXT:    mov16 a2, a0
6118; CSKY-NEXT:    ld16.w a1, (sp, 24)
6119; CSKY-NEXT:    ld16.w a0, (sp, 20)
6120; CSKY-NEXT:    bez32 a2, .LBB206_1
6121; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6122; CSKY-NEXT:    addi16 sp, sp, 28
6123; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6124; CSKY-NEXT:    ld16.w l0, (sp, 4)
6125; CSKY-NEXT:    ld16.w l1, (sp, 8)
6126; CSKY-NEXT:    ld16.w l2, (sp, 12)
6127; CSKY-NEXT:    ld16.w l3, (sp, 16)
6128; CSKY-NEXT:    addi16 sp, sp, 20
6129; CSKY-NEXT:    rts16
6130; CSKY-NEXT:    .p2align 1
6131; CSKY-NEXT:  # %bb.3:
6132; CSKY-NEXT:    .p2align 2
6133; CSKY-NEXT:  .LCPI206_0:
6134; CSKY-NEXT:    .long __atomic_compare_exchange_8
6135;
6136  %1 = atomicrmw min i64* %a, i64 %b acquire
6137  ret i64 %1
6138}
6139
6140define i64 @atomicrmw_min_i64_release(i64 *%a, i64 %b) nounwind {
6141; CSKY-LABEL: atomicrmw_min_i64_release:
6142; CSKY:       # %bb.0:
6143; CSKY-NEXT:    subi16 sp, sp, 24
6144; CSKY-NEXT:    st16.w l3, (sp, 20)
6145; CSKY-NEXT:    st16.w l2, (sp, 16)
6146; CSKY-NEXT:    st16.w l1, (sp, 12)
6147; CSKY-NEXT:    st16.w l0, (sp, 8)
6148; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
6149; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
6150; CSKY-NEXT:    subi16 sp, sp, 28
6151; CSKY-NEXT:    mov16 l0, a2
6152; CSKY-NEXT:    mov16 l1, a1
6153; CSKY-NEXT:    mov16 l2, a0
6154; CSKY-NEXT:    ld16.w a1, (a0, 4)
6155; CSKY-NEXT:    ld16.w a0, (a0, 0)
6156; CSKY-NEXT:    movi16 l3, 0
6157; CSKY-NEXT:    movi32 l4, 3
6158; CSKY-NEXT:  .LBB207_1: # %atomicrmw.start
6159; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6160; CSKY-NEXT:    cmphs16 l1, a0
6161; CSKY-NEXT:    mvc32 a2
6162; CSKY-NEXT:    st16.w a2, (sp, 12)
6163; CSKY-NEXT:    cmpne16 a1, l0
6164; CSKY-NEXT:    mvc32 a2
6165; CSKY-NEXT:    st16.w a2, (sp, 16)
6166; CSKY-NEXT:    cmplt16 l0, a1
6167; CSKY-NEXT:    mvcv16 a2
6168; CSKY-NEXT:    ld16.w a3, (sp, 12)
6169; CSKY-NEXT:    btsti32 a3, 0
6170; CSKY-NEXT:    mvc32 a3
6171; CSKY-NEXT:    ld32.w t0, (sp, 16)
6172; CSKY-NEXT:    btsti32 t0, 0
6173; CSKY-NEXT:    movf32 a2, a3
6174; CSKY-NEXT:    btsti32 a2, 0
6175; CSKY-NEXT:    mov16 a2, l1
6176; CSKY-NEXT:    movt32 a2, a0
6177; CSKY-NEXT:    mov16 a3, l0
6178; CSKY-NEXT:    movt32 a3, a1
6179; CSKY-NEXT:    st16.w a0, (sp, 20)
6180; CSKY-NEXT:    st16.w a1, (sp, 24)
6181; CSKY-NEXT:    st16.w l3, (sp, 4)
6182; CSKY-NEXT:    st32.w l4, (sp, 0)
6183; CSKY-NEXT:    mov16 a0, l2
6184; CSKY-NEXT:    addi16 a1, sp, 20
6185; CSKY-NEXT:    jsri32 [.LCPI207_0]
6186; CSKY-NEXT:    mov16 a2, a0
6187; CSKY-NEXT:    ld16.w a1, (sp, 24)
6188; CSKY-NEXT:    ld16.w a0, (sp, 20)
6189; CSKY-NEXT:    bez32 a2, .LBB207_1
6190; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6191; CSKY-NEXT:    addi16 sp, sp, 28
6192; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
6193; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
6194; CSKY-NEXT:    ld16.w l0, (sp, 8)
6195; CSKY-NEXT:    ld16.w l1, (sp, 12)
6196; CSKY-NEXT:    ld16.w l2, (sp, 16)
6197; CSKY-NEXT:    ld16.w l3, (sp, 20)
6198; CSKY-NEXT:    addi16 sp, sp, 24
6199; CSKY-NEXT:    rts16
6200; CSKY-NEXT:    .p2align 1
6201; CSKY-NEXT:  # %bb.3:
6202; CSKY-NEXT:    .p2align 2
6203; CSKY-NEXT:  .LCPI207_0:
6204; CSKY-NEXT:    .long __atomic_compare_exchange_8
6205;
6206  %1 = atomicrmw min i64* %a, i64 %b release
6207  ret i64 %1
6208}
6209
6210define i64 @atomicrmw_min_i64_acq_rel(i64 *%a, i64 %b) nounwind {
6211; CSKY-LABEL: atomicrmw_min_i64_acq_rel:
6212; CSKY:       # %bb.0:
6213; CSKY-NEXT:    subi16 sp, sp, 24
6214; CSKY-NEXT:    st16.w l3, (sp, 20)
6215; CSKY-NEXT:    st16.w l2, (sp, 16)
6216; CSKY-NEXT:    st16.w l1, (sp, 12)
6217; CSKY-NEXT:    st16.w l0, (sp, 8)
6218; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
6219; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
6220; CSKY-NEXT:    subi16 sp, sp, 28
6221; CSKY-NEXT:    mov16 l0, a2
6222; CSKY-NEXT:    mov16 l1, a1
6223; CSKY-NEXT:    mov16 l2, a0
6224; CSKY-NEXT:    ld16.w a1, (a0, 4)
6225; CSKY-NEXT:    ld16.w a0, (a0, 0)
6226; CSKY-NEXT:    movi16 l3, 2
6227; CSKY-NEXT:    movi32 l4, 4
6228; CSKY-NEXT:  .LBB208_1: # %atomicrmw.start
6229; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6230; CSKY-NEXT:    cmphs16 l1, a0
6231; CSKY-NEXT:    mvc32 a2
6232; CSKY-NEXT:    st16.w a2, (sp, 12)
6233; CSKY-NEXT:    cmpne16 a1, l0
6234; CSKY-NEXT:    mvc32 a2
6235; CSKY-NEXT:    st16.w a2, (sp, 16)
6236; CSKY-NEXT:    cmplt16 l0, a1
6237; CSKY-NEXT:    mvcv16 a2
6238; CSKY-NEXT:    ld16.w a3, (sp, 12)
6239; CSKY-NEXT:    btsti32 a3, 0
6240; CSKY-NEXT:    mvc32 a3
6241; CSKY-NEXT:    ld32.w t0, (sp, 16)
6242; CSKY-NEXT:    btsti32 t0, 0
6243; CSKY-NEXT:    movf32 a2, a3
6244; CSKY-NEXT:    btsti32 a2, 0
6245; CSKY-NEXT:    mov16 a2, l1
6246; CSKY-NEXT:    movt32 a2, a0
6247; CSKY-NEXT:    mov16 a3, l0
6248; CSKY-NEXT:    movt32 a3, a1
6249; CSKY-NEXT:    st16.w a0, (sp, 20)
6250; CSKY-NEXT:    st16.w a1, (sp, 24)
6251; CSKY-NEXT:    st16.w l3, (sp, 4)
6252; CSKY-NEXT:    st32.w l4, (sp, 0)
6253; CSKY-NEXT:    mov16 a0, l2
6254; CSKY-NEXT:    addi16 a1, sp, 20
6255; CSKY-NEXT:    jsri32 [.LCPI208_0]
6256; CSKY-NEXT:    mov16 a2, a0
6257; CSKY-NEXT:    ld16.w a1, (sp, 24)
6258; CSKY-NEXT:    ld16.w a0, (sp, 20)
6259; CSKY-NEXT:    bez32 a2, .LBB208_1
6260; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6261; CSKY-NEXT:    addi16 sp, sp, 28
6262; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
6263; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
6264; CSKY-NEXT:    ld16.w l0, (sp, 8)
6265; CSKY-NEXT:    ld16.w l1, (sp, 12)
6266; CSKY-NEXT:    ld16.w l2, (sp, 16)
6267; CSKY-NEXT:    ld16.w l3, (sp, 20)
6268; CSKY-NEXT:    addi16 sp, sp, 24
6269; CSKY-NEXT:    rts16
6270; CSKY-NEXT:    .p2align 1
6271; CSKY-NEXT:  # %bb.3:
6272; CSKY-NEXT:    .p2align 2
6273; CSKY-NEXT:  .LCPI208_0:
6274; CSKY-NEXT:    .long __atomic_compare_exchange_8
6275;
6276  %1 = atomicrmw min i64* %a, i64 %b acq_rel
6277  ret i64 %1
6278}
6279
6280define i64 @atomicrmw_min_i64_seq_cst(i64 *%a, i64 %b) nounwind {
6281; CSKY-LABEL: atomicrmw_min_i64_seq_cst:
6282; CSKY:       # %bb.0:
6283; CSKY-NEXT:    subi16 sp, sp, 20
6284; CSKY-NEXT:    st16.w l3, (sp, 16)
6285; CSKY-NEXT:    st16.w l2, (sp, 12)
6286; CSKY-NEXT:    st16.w l1, (sp, 8)
6287; CSKY-NEXT:    st16.w l0, (sp, 4)
6288; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6289; CSKY-NEXT:    subi16 sp, sp, 28
6290; CSKY-NEXT:    mov16 l0, a2
6291; CSKY-NEXT:    mov16 l1, a1
6292; CSKY-NEXT:    mov16 l2, a0
6293; CSKY-NEXT:    ld16.w a1, (a0, 4)
6294; CSKY-NEXT:    ld16.w a0, (a0, 0)
6295; CSKY-NEXT:    movi16 l3, 5
6296; CSKY-NEXT:  .LBB209_1: # %atomicrmw.start
6297; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6298; CSKY-NEXT:    cmphs16 l1, a0
6299; CSKY-NEXT:    mvc32 a2
6300; CSKY-NEXT:    st16.w a2, (sp, 12)
6301; CSKY-NEXT:    cmpne16 a1, l0
6302; CSKY-NEXT:    mvc32 a2
6303; CSKY-NEXT:    st16.w a2, (sp, 16)
6304; CSKY-NEXT:    cmplt16 l0, a1
6305; CSKY-NEXT:    mvcv16 a2
6306; CSKY-NEXT:    ld16.w a3, (sp, 12)
6307; CSKY-NEXT:    btsti32 a3, 0
6308; CSKY-NEXT:    mvc32 a3
6309; CSKY-NEXT:    ld32.w t0, (sp, 16)
6310; CSKY-NEXT:    btsti32 t0, 0
6311; CSKY-NEXT:    movf32 a2, a3
6312; CSKY-NEXT:    btsti32 a2, 0
6313; CSKY-NEXT:    mov16 a2, l1
6314; CSKY-NEXT:    movt32 a2, a0
6315; CSKY-NEXT:    mov16 a3, l0
6316; CSKY-NEXT:    movt32 a3, a1
6317; CSKY-NEXT:    st16.w a0, (sp, 20)
6318; CSKY-NEXT:    st16.w a1, (sp, 24)
6319; CSKY-NEXT:    st16.w l3, (sp, 4)
6320; CSKY-NEXT:    st16.w l3, (sp, 0)
6321; CSKY-NEXT:    mov16 a0, l2
6322; CSKY-NEXT:    addi16 a1, sp, 20
6323; CSKY-NEXT:    jsri32 [.LCPI209_0]
6324; CSKY-NEXT:    mov16 a2, a0
6325; CSKY-NEXT:    ld16.w a1, (sp, 24)
6326; CSKY-NEXT:    ld16.w a0, (sp, 20)
6327; CSKY-NEXT:    bez32 a2, .LBB209_1
6328; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6329; CSKY-NEXT:    addi16 sp, sp, 28
6330; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6331; CSKY-NEXT:    ld16.w l0, (sp, 4)
6332; CSKY-NEXT:    ld16.w l1, (sp, 8)
6333; CSKY-NEXT:    ld16.w l2, (sp, 12)
6334; CSKY-NEXT:    ld16.w l3, (sp, 16)
6335; CSKY-NEXT:    addi16 sp, sp, 20
6336; CSKY-NEXT:    rts16
6337; CSKY-NEXT:    .p2align 1
6338; CSKY-NEXT:  # %bb.3:
6339; CSKY-NEXT:    .p2align 2
6340; CSKY-NEXT:  .LCPI209_0:
6341; CSKY-NEXT:    .long __atomic_compare_exchange_8
6342;
6343  %1 = atomicrmw min i64* %a, i64 %b seq_cst
6344  ret i64 %1
6345}
6346
6347define i64 @atomicrmw_umax_i64_monotonic(i64 *%a, i64 %b) nounwind {
6348; CSKY-LABEL: atomicrmw_umax_i64_monotonic:
6349; CSKY:       # %bb.0:
6350; CSKY-NEXT:    subi16 sp, sp, 20
6351; CSKY-NEXT:    st16.w l3, (sp, 16)
6352; CSKY-NEXT:    st16.w l2, (sp, 12)
6353; CSKY-NEXT:    st16.w l1, (sp, 8)
6354; CSKY-NEXT:    st16.w l0, (sp, 4)
6355; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6356; CSKY-NEXT:    subi16 sp, sp, 24
6357; CSKY-NEXT:    mov16 l0, a2
6358; CSKY-NEXT:    mov16 l1, a1
6359; CSKY-NEXT:    mov16 l2, a0
6360; CSKY-NEXT:    ld16.w a1, (a0, 4)
6361; CSKY-NEXT:    ld16.w a0, (a0, 0)
6362; CSKY-NEXT:    movi16 l3, 0
6363; CSKY-NEXT:  .LBB210_1: # %atomicrmw.start
6364; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6365; CSKY-NEXT:    cmpne16 a1, l0
6366; CSKY-NEXT:    mvc32 a2
6367; CSKY-NEXT:    st16.w a2, (sp, 12)
6368; CSKY-NEXT:    cmphs16 l1, a0
6369; CSKY-NEXT:    mvcv16 a2
6370; CSKY-NEXT:    cmphs16 l0, a1
6371; CSKY-NEXT:    mvcv16 a3
6372; CSKY-NEXT:    ld32.w t0, (sp, 12)
6373; CSKY-NEXT:    btsti32 t0, 0
6374; CSKY-NEXT:    movf32 a3, a2
6375; CSKY-NEXT:    btsti32 a3, 0
6376; CSKY-NEXT:    mov16 a2, l1
6377; CSKY-NEXT:    movt32 a2, a0
6378; CSKY-NEXT:    mov16 a3, l0
6379; CSKY-NEXT:    movt32 a3, a1
6380; CSKY-NEXT:    st16.w a0, (sp, 16)
6381; CSKY-NEXT:    st16.w a1, (sp, 20)
6382; CSKY-NEXT:    st16.w l3, (sp, 4)
6383; CSKY-NEXT:    st16.w l3, (sp, 0)
6384; CSKY-NEXT:    mov16 a0, l2
6385; CSKY-NEXT:    addi16 a1, sp, 16
6386; CSKY-NEXT:    jsri32 [.LCPI210_0]
6387; CSKY-NEXT:    mov16 a2, a0
6388; CSKY-NEXT:    ld16.w a1, (sp, 20)
6389; CSKY-NEXT:    ld16.w a0, (sp, 16)
6390; CSKY-NEXT:    bez32 a2, .LBB210_1
6391; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6392; CSKY-NEXT:    addi16 sp, sp, 24
6393; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6394; CSKY-NEXT:    ld16.w l0, (sp, 4)
6395; CSKY-NEXT:    ld16.w l1, (sp, 8)
6396; CSKY-NEXT:    ld16.w l2, (sp, 12)
6397; CSKY-NEXT:    ld16.w l3, (sp, 16)
6398; CSKY-NEXT:    addi16 sp, sp, 20
6399; CSKY-NEXT:    rts16
6400; CSKY-NEXT:    .p2align 1
6401; CSKY-NEXT:  # %bb.3:
6402; CSKY-NEXT:    .p2align 2
6403; CSKY-NEXT:  .LCPI210_0:
6404; CSKY-NEXT:    .long __atomic_compare_exchange_8
6405;
6406  %1 = atomicrmw umax i64* %a, i64 %b monotonic
6407  ret i64 %1
6408}
6409
6410define i64 @atomicrmw_umax_i64_acquire(i64 *%a, i64 %b) nounwind {
6411; CSKY-LABEL: atomicrmw_umax_i64_acquire:
6412; CSKY:       # %bb.0:
6413; CSKY-NEXT:    subi16 sp, sp, 20
6414; CSKY-NEXT:    st16.w l3, (sp, 16)
6415; CSKY-NEXT:    st16.w l2, (sp, 12)
6416; CSKY-NEXT:    st16.w l1, (sp, 8)
6417; CSKY-NEXT:    st16.w l0, (sp, 4)
6418; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6419; CSKY-NEXT:    subi16 sp, sp, 24
6420; CSKY-NEXT:    mov16 l0, a2
6421; CSKY-NEXT:    mov16 l1, a1
6422; CSKY-NEXT:    mov16 l2, a0
6423; CSKY-NEXT:    ld16.w a1, (a0, 4)
6424; CSKY-NEXT:    ld16.w a0, (a0, 0)
6425; CSKY-NEXT:    movi16 l3, 2
6426; CSKY-NEXT:  .LBB211_1: # %atomicrmw.start
6427; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6428; CSKY-NEXT:    cmpne16 a1, l0
6429; CSKY-NEXT:    mvc32 a2
6430; CSKY-NEXT:    st16.w a2, (sp, 12)
6431; CSKY-NEXT:    cmphs16 l1, a0
6432; CSKY-NEXT:    mvcv16 a2
6433; CSKY-NEXT:    cmphs16 l0, a1
6434; CSKY-NEXT:    mvcv16 a3
6435; CSKY-NEXT:    ld32.w t0, (sp, 12)
6436; CSKY-NEXT:    btsti32 t0, 0
6437; CSKY-NEXT:    movf32 a3, a2
6438; CSKY-NEXT:    btsti32 a3, 0
6439; CSKY-NEXT:    mov16 a2, l1
6440; CSKY-NEXT:    movt32 a2, a0
6441; CSKY-NEXT:    mov16 a3, l0
6442; CSKY-NEXT:    movt32 a3, a1
6443; CSKY-NEXT:    st16.w a0, (sp, 16)
6444; CSKY-NEXT:    st16.w a1, (sp, 20)
6445; CSKY-NEXT:    st16.w l3, (sp, 4)
6446; CSKY-NEXT:    st16.w l3, (sp, 0)
6447; CSKY-NEXT:    mov16 a0, l2
6448; CSKY-NEXT:    addi16 a1, sp, 16
6449; CSKY-NEXT:    jsri32 [.LCPI211_0]
6450; CSKY-NEXT:    mov16 a2, a0
6451; CSKY-NEXT:    ld16.w a1, (sp, 20)
6452; CSKY-NEXT:    ld16.w a0, (sp, 16)
6453; CSKY-NEXT:    bez32 a2, .LBB211_1
6454; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6455; CSKY-NEXT:    addi16 sp, sp, 24
6456; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6457; CSKY-NEXT:    ld16.w l0, (sp, 4)
6458; CSKY-NEXT:    ld16.w l1, (sp, 8)
6459; CSKY-NEXT:    ld16.w l2, (sp, 12)
6460; CSKY-NEXT:    ld16.w l3, (sp, 16)
6461; CSKY-NEXT:    addi16 sp, sp, 20
6462; CSKY-NEXT:    rts16
6463; CSKY-NEXT:    .p2align 1
6464; CSKY-NEXT:  # %bb.3:
6465; CSKY-NEXT:    .p2align 2
6466; CSKY-NEXT:  .LCPI211_0:
6467; CSKY-NEXT:    .long __atomic_compare_exchange_8
6468;
6469  %1 = atomicrmw umax i64* %a, i64 %b acquire
6470  ret i64 %1
6471}
6472
6473define i64 @atomicrmw_umax_i64_release(i64 *%a, i64 %b) nounwind {
6474; CSKY-LABEL: atomicrmw_umax_i64_release:
6475; CSKY:       # %bb.0:
6476; CSKY-NEXT:    subi16 sp, sp, 24
6477; CSKY-NEXT:    st16.w l3, (sp, 20)
6478; CSKY-NEXT:    st16.w l2, (sp, 16)
6479; CSKY-NEXT:    st16.w l1, (sp, 12)
6480; CSKY-NEXT:    st16.w l0, (sp, 8)
6481; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
6482; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
6483; CSKY-NEXT:    subi16 sp, sp, 24
6484; CSKY-NEXT:    mov16 l0, a2
6485; CSKY-NEXT:    mov16 l1, a1
6486; CSKY-NEXT:    mov16 l2, a0
6487; CSKY-NEXT:    ld16.w a1, (a0, 4)
6488; CSKY-NEXT:    ld16.w a0, (a0, 0)
6489; CSKY-NEXT:    movi16 l3, 0
6490; CSKY-NEXT:    movi32 l4, 3
6491; CSKY-NEXT:  .LBB212_1: # %atomicrmw.start
6492; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6493; CSKY-NEXT:    cmpne16 a1, l0
6494; CSKY-NEXT:    mvc32 a2
6495; CSKY-NEXT:    st16.w a2, (sp, 12)
6496; CSKY-NEXT:    cmphs16 l1, a0
6497; CSKY-NEXT:    mvcv16 a2
6498; CSKY-NEXT:    cmphs16 l0, a1
6499; CSKY-NEXT:    mvcv16 a3
6500; CSKY-NEXT:    ld32.w t0, (sp, 12)
6501; CSKY-NEXT:    btsti32 t0, 0
6502; CSKY-NEXT:    movf32 a3, a2
6503; CSKY-NEXT:    btsti32 a3, 0
6504; CSKY-NEXT:    mov16 a2, l1
6505; CSKY-NEXT:    movt32 a2, a0
6506; CSKY-NEXT:    mov16 a3, l0
6507; CSKY-NEXT:    movt32 a3, a1
6508; CSKY-NEXT:    st16.w a0, (sp, 16)
6509; CSKY-NEXT:    st16.w a1, (sp, 20)
6510; CSKY-NEXT:    st16.w l3, (sp, 4)
6511; CSKY-NEXT:    st32.w l4, (sp, 0)
6512; CSKY-NEXT:    mov16 a0, l2
6513; CSKY-NEXT:    addi16 a1, sp, 16
6514; CSKY-NEXT:    jsri32 [.LCPI212_0]
6515; CSKY-NEXT:    mov16 a2, a0
6516; CSKY-NEXT:    ld16.w a1, (sp, 20)
6517; CSKY-NEXT:    ld16.w a0, (sp, 16)
6518; CSKY-NEXT:    bez32 a2, .LBB212_1
6519; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6520; CSKY-NEXT:    addi16 sp, sp, 24
6521; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
6522; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
6523; CSKY-NEXT:    ld16.w l0, (sp, 8)
6524; CSKY-NEXT:    ld16.w l1, (sp, 12)
6525; CSKY-NEXT:    ld16.w l2, (sp, 16)
6526; CSKY-NEXT:    ld16.w l3, (sp, 20)
6527; CSKY-NEXT:    addi16 sp, sp, 24
6528; CSKY-NEXT:    rts16
6529; CSKY-NEXT:    .p2align 1
6530; CSKY-NEXT:  # %bb.3:
6531; CSKY-NEXT:    .p2align 2
6532; CSKY-NEXT:  .LCPI212_0:
6533; CSKY-NEXT:    .long __atomic_compare_exchange_8
6534;
6535  %1 = atomicrmw umax i64* %a, i64 %b release
6536  ret i64 %1
6537}
6538
6539define i64 @atomicrmw_umax_i64_acq_rel(i64 *%a, i64 %b) nounwind {
6540; CSKY-LABEL: atomicrmw_umax_i64_acq_rel:
6541; CSKY:       # %bb.0:
6542; CSKY-NEXT:    subi16 sp, sp, 24
6543; CSKY-NEXT:    st16.w l3, (sp, 20)
6544; CSKY-NEXT:    st16.w l2, (sp, 16)
6545; CSKY-NEXT:    st16.w l1, (sp, 12)
6546; CSKY-NEXT:    st16.w l0, (sp, 8)
6547; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
6548; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
6549; CSKY-NEXT:    subi16 sp, sp, 24
6550; CSKY-NEXT:    mov16 l0, a2
6551; CSKY-NEXT:    mov16 l1, a1
6552; CSKY-NEXT:    mov16 l2, a0
6553; CSKY-NEXT:    ld16.w a1, (a0, 4)
6554; CSKY-NEXT:    ld16.w a0, (a0, 0)
6555; CSKY-NEXT:    movi16 l3, 2
6556; CSKY-NEXT:    movi32 l4, 4
6557; CSKY-NEXT:  .LBB213_1: # %atomicrmw.start
6558; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6559; CSKY-NEXT:    cmpne16 a1, l0
6560; CSKY-NEXT:    mvc32 a2
6561; CSKY-NEXT:    st16.w a2, (sp, 12)
6562; CSKY-NEXT:    cmphs16 l1, a0
6563; CSKY-NEXT:    mvcv16 a2
6564; CSKY-NEXT:    cmphs16 l0, a1
6565; CSKY-NEXT:    mvcv16 a3
6566; CSKY-NEXT:    ld32.w t0, (sp, 12)
6567; CSKY-NEXT:    btsti32 t0, 0
6568; CSKY-NEXT:    movf32 a3, a2
6569; CSKY-NEXT:    btsti32 a3, 0
6570; CSKY-NEXT:    mov16 a2, l1
6571; CSKY-NEXT:    movt32 a2, a0
6572; CSKY-NEXT:    mov16 a3, l0
6573; CSKY-NEXT:    movt32 a3, a1
6574; CSKY-NEXT:    st16.w a0, (sp, 16)
6575; CSKY-NEXT:    st16.w a1, (sp, 20)
6576; CSKY-NEXT:    st16.w l3, (sp, 4)
6577; CSKY-NEXT:    st32.w l4, (sp, 0)
6578; CSKY-NEXT:    mov16 a0, l2
6579; CSKY-NEXT:    addi16 a1, sp, 16
6580; CSKY-NEXT:    jsri32 [.LCPI213_0]
6581; CSKY-NEXT:    mov16 a2, a0
6582; CSKY-NEXT:    ld16.w a1, (sp, 20)
6583; CSKY-NEXT:    ld16.w a0, (sp, 16)
6584; CSKY-NEXT:    bez32 a2, .LBB213_1
6585; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6586; CSKY-NEXT:    addi16 sp, sp, 24
6587; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
6588; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
6589; CSKY-NEXT:    ld16.w l0, (sp, 8)
6590; CSKY-NEXT:    ld16.w l1, (sp, 12)
6591; CSKY-NEXT:    ld16.w l2, (sp, 16)
6592; CSKY-NEXT:    ld16.w l3, (sp, 20)
6593; CSKY-NEXT:    addi16 sp, sp, 24
6594; CSKY-NEXT:    rts16
6595; CSKY-NEXT:    .p2align 1
6596; CSKY-NEXT:  # %bb.3:
6597; CSKY-NEXT:    .p2align 2
6598; CSKY-NEXT:  .LCPI213_0:
6599; CSKY-NEXT:    .long __atomic_compare_exchange_8
6600;
6601  %1 = atomicrmw umax i64* %a, i64 %b acq_rel
6602  ret i64 %1
6603}
6604
6605define i64 @atomicrmw_umax_i64_seq_cst(i64 *%a, i64 %b) nounwind {
6606; CSKY-LABEL: atomicrmw_umax_i64_seq_cst:
6607; CSKY:       # %bb.0:
6608; CSKY-NEXT:    subi16 sp, sp, 20
6609; CSKY-NEXT:    st16.w l3, (sp, 16)
6610; CSKY-NEXT:    st16.w l2, (sp, 12)
6611; CSKY-NEXT:    st16.w l1, (sp, 8)
6612; CSKY-NEXT:    st16.w l0, (sp, 4)
6613; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6614; CSKY-NEXT:    subi16 sp, sp, 24
6615; CSKY-NEXT:    mov16 l0, a2
6616; CSKY-NEXT:    mov16 l1, a1
6617; CSKY-NEXT:    mov16 l2, a0
6618; CSKY-NEXT:    ld16.w a1, (a0, 4)
6619; CSKY-NEXT:    ld16.w a0, (a0, 0)
6620; CSKY-NEXT:    movi16 l3, 5
6621; CSKY-NEXT:  .LBB214_1: # %atomicrmw.start
6622; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6623; CSKY-NEXT:    cmpne16 a1, l0
6624; CSKY-NEXT:    mvc32 a2
6625; CSKY-NEXT:    st16.w a2, (sp, 12)
6626; CSKY-NEXT:    cmphs16 l1, a0
6627; CSKY-NEXT:    mvcv16 a2
6628; CSKY-NEXT:    cmphs16 l0, a1
6629; CSKY-NEXT:    mvcv16 a3
6630; CSKY-NEXT:    ld32.w t0, (sp, 12)
6631; CSKY-NEXT:    btsti32 t0, 0
6632; CSKY-NEXT:    movf32 a3, a2
6633; CSKY-NEXT:    btsti32 a3, 0
6634; CSKY-NEXT:    mov16 a2, l1
6635; CSKY-NEXT:    movt32 a2, a0
6636; CSKY-NEXT:    mov16 a3, l0
6637; CSKY-NEXT:    movt32 a3, a1
6638; CSKY-NEXT:    st16.w a0, (sp, 16)
6639; CSKY-NEXT:    st16.w a1, (sp, 20)
6640; CSKY-NEXT:    st16.w l3, (sp, 4)
6641; CSKY-NEXT:    st16.w l3, (sp, 0)
6642; CSKY-NEXT:    mov16 a0, l2
6643; CSKY-NEXT:    addi16 a1, sp, 16
6644; CSKY-NEXT:    jsri32 [.LCPI214_0]
6645; CSKY-NEXT:    mov16 a2, a0
6646; CSKY-NEXT:    ld16.w a1, (sp, 20)
6647; CSKY-NEXT:    ld16.w a0, (sp, 16)
6648; CSKY-NEXT:    bez32 a2, .LBB214_1
6649; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6650; CSKY-NEXT:    addi16 sp, sp, 24
6651; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6652; CSKY-NEXT:    ld16.w l0, (sp, 4)
6653; CSKY-NEXT:    ld16.w l1, (sp, 8)
6654; CSKY-NEXT:    ld16.w l2, (sp, 12)
6655; CSKY-NEXT:    ld16.w l3, (sp, 16)
6656; CSKY-NEXT:    addi16 sp, sp, 20
6657; CSKY-NEXT:    rts16
6658; CSKY-NEXT:    .p2align 1
6659; CSKY-NEXT:  # %bb.3:
6660; CSKY-NEXT:    .p2align 2
6661; CSKY-NEXT:  .LCPI214_0:
6662; CSKY-NEXT:    .long __atomic_compare_exchange_8
6663;
6664  %1 = atomicrmw umax i64* %a, i64 %b seq_cst
6665  ret i64 %1
6666}
6667
6668define i64 @atomicrmw_umin_i64_monotonic(i64 *%a, i64 %b) nounwind {
6669; CSKY-LABEL: atomicrmw_umin_i64_monotonic:
6670; CSKY:       # %bb.0:
6671; CSKY-NEXT:    subi16 sp, sp, 20
6672; CSKY-NEXT:    st16.w l3, (sp, 16)
6673; CSKY-NEXT:    st16.w l2, (sp, 12)
6674; CSKY-NEXT:    st16.w l1, (sp, 8)
6675; CSKY-NEXT:    st16.w l0, (sp, 4)
6676; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6677; CSKY-NEXT:    subi16 sp, sp, 32
6678; CSKY-NEXT:    mov16 l0, a2
6679; CSKY-NEXT:    mov16 l1, a1
6680; CSKY-NEXT:    mov16 l2, a0
6681; CSKY-NEXT:    ld16.w a1, (a0, 4)
6682; CSKY-NEXT:    ld16.w a0, (a0, 0)
6683; CSKY-NEXT:    movi16 l3, 0
6684; CSKY-NEXT:  .LBB215_1: # %atomicrmw.start
6685; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6686; CSKY-NEXT:    cmphs16 l1, a0
6687; CSKY-NEXT:    mvc32 a2
6688; CSKY-NEXT:    st16.w a2, (sp, 16)
6689; CSKY-NEXT:    cmphs16 l0, a1
6690; CSKY-NEXT:    mvc32 a2
6691; CSKY-NEXT:    st16.w a2, (sp, 12)
6692; CSKY-NEXT:    cmpne16 a1, l0
6693; CSKY-NEXT:    mvc32 a2
6694; CSKY-NEXT:    st16.w a2, (sp, 20)
6695; CSKY-NEXT:    ld16.w a2, (sp, 16)
6696; CSKY-NEXT:    btsti32 a2, 0
6697; CSKY-NEXT:    mvc32 a2
6698; CSKY-NEXT:    ld16.w a3, (sp, 12)
6699; CSKY-NEXT:    btsti32 a3, 0
6700; CSKY-NEXT:    mvc32 a3
6701; CSKY-NEXT:    ld32.w t0, (sp, 20)
6702; CSKY-NEXT:    btsti32 t0, 0
6703; CSKY-NEXT:    movf32 a3, a2
6704; CSKY-NEXT:    btsti32 a3, 0
6705; CSKY-NEXT:    mov16 a2, l1
6706; CSKY-NEXT:    movt32 a2, a0
6707; CSKY-NEXT:    mov16 a3, l0
6708; CSKY-NEXT:    movt32 a3, a1
6709; CSKY-NEXT:    st16.w a0, (sp, 24)
6710; CSKY-NEXT:    st16.w a1, (sp, 28)
6711; CSKY-NEXT:    st16.w l3, (sp, 4)
6712; CSKY-NEXT:    st16.w l3, (sp, 0)
6713; CSKY-NEXT:    mov16 a0, l2
6714; CSKY-NEXT:    addi16 a1, sp, 24
6715; CSKY-NEXT:    jsri32 [.LCPI215_0]
6716; CSKY-NEXT:    mov16 a2, a0
6717; CSKY-NEXT:    ld16.w a1, (sp, 28)
6718; CSKY-NEXT:    ld16.w a0, (sp, 24)
6719; CSKY-NEXT:    bez32 a2, .LBB215_1
6720; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6721; CSKY-NEXT:    addi16 sp, sp, 32
6722; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6723; CSKY-NEXT:    ld16.w l0, (sp, 4)
6724; CSKY-NEXT:    ld16.w l1, (sp, 8)
6725; CSKY-NEXT:    ld16.w l2, (sp, 12)
6726; CSKY-NEXT:    ld16.w l3, (sp, 16)
6727; CSKY-NEXT:    addi16 sp, sp, 20
6728; CSKY-NEXT:    rts16
6729; CSKY-NEXT:    .p2align 1
6730; CSKY-NEXT:  # %bb.3:
6731; CSKY-NEXT:    .p2align 2
6732; CSKY-NEXT:  .LCPI215_0:
6733; CSKY-NEXT:    .long __atomic_compare_exchange_8
6734;
6735  %1 = atomicrmw umin i64* %a, i64 %b monotonic
6736  ret i64 %1
6737}
6738
6739define i64 @atomicrmw_umin_i64_acquire(i64 *%a, i64 %b) nounwind {
6740; CSKY-LABEL: atomicrmw_umin_i64_acquire:
6741; CSKY:       # %bb.0:
6742; CSKY-NEXT:    subi16 sp, sp, 20
6743; CSKY-NEXT:    st16.w l3, (sp, 16)
6744; CSKY-NEXT:    st16.w l2, (sp, 12)
6745; CSKY-NEXT:    st16.w l1, (sp, 8)
6746; CSKY-NEXT:    st16.w l0, (sp, 4)
6747; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6748; CSKY-NEXT:    subi16 sp, sp, 32
6749; CSKY-NEXT:    mov16 l0, a2
6750; CSKY-NEXT:    mov16 l1, a1
6751; CSKY-NEXT:    mov16 l2, a0
6752; CSKY-NEXT:    ld16.w a1, (a0, 4)
6753; CSKY-NEXT:    ld16.w a0, (a0, 0)
6754; CSKY-NEXT:    movi16 l3, 2
6755; CSKY-NEXT:  .LBB216_1: # %atomicrmw.start
6756; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6757; CSKY-NEXT:    cmphs16 l1, a0
6758; CSKY-NEXT:    mvc32 a2
6759; CSKY-NEXT:    st16.w a2, (sp, 16)
6760; CSKY-NEXT:    cmphs16 l0, a1
6761; CSKY-NEXT:    mvc32 a2
6762; CSKY-NEXT:    st16.w a2, (sp, 12)
6763; CSKY-NEXT:    cmpne16 a1, l0
6764; CSKY-NEXT:    mvc32 a2
6765; CSKY-NEXT:    st16.w a2, (sp, 20)
6766; CSKY-NEXT:    ld16.w a2, (sp, 16)
6767; CSKY-NEXT:    btsti32 a2, 0
6768; CSKY-NEXT:    mvc32 a2
6769; CSKY-NEXT:    ld16.w a3, (sp, 12)
6770; CSKY-NEXT:    btsti32 a3, 0
6771; CSKY-NEXT:    mvc32 a3
6772; CSKY-NEXT:    ld32.w t0, (sp, 20)
6773; CSKY-NEXT:    btsti32 t0, 0
6774; CSKY-NEXT:    movf32 a3, a2
6775; CSKY-NEXT:    btsti32 a3, 0
6776; CSKY-NEXT:    mov16 a2, l1
6777; CSKY-NEXT:    movt32 a2, a0
6778; CSKY-NEXT:    mov16 a3, l0
6779; CSKY-NEXT:    movt32 a3, a1
6780; CSKY-NEXT:    st16.w a0, (sp, 24)
6781; CSKY-NEXT:    st16.w a1, (sp, 28)
6782; CSKY-NEXT:    st16.w l3, (sp, 4)
6783; CSKY-NEXT:    st16.w l3, (sp, 0)
6784; CSKY-NEXT:    mov16 a0, l2
6785; CSKY-NEXT:    addi16 a1, sp, 24
6786; CSKY-NEXT:    jsri32 [.LCPI216_0]
6787; CSKY-NEXT:    mov16 a2, a0
6788; CSKY-NEXT:    ld16.w a1, (sp, 28)
6789; CSKY-NEXT:    ld16.w a0, (sp, 24)
6790; CSKY-NEXT:    bez32 a2, .LBB216_1
6791; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6792; CSKY-NEXT:    addi16 sp, sp, 32
6793; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
6794; CSKY-NEXT:    ld16.w l0, (sp, 4)
6795; CSKY-NEXT:    ld16.w l1, (sp, 8)
6796; CSKY-NEXT:    ld16.w l2, (sp, 12)
6797; CSKY-NEXT:    ld16.w l3, (sp, 16)
6798; CSKY-NEXT:    addi16 sp, sp, 20
6799; CSKY-NEXT:    rts16
6800; CSKY-NEXT:    .p2align 1
6801; CSKY-NEXT:  # %bb.3:
6802; CSKY-NEXT:    .p2align 2
6803; CSKY-NEXT:  .LCPI216_0:
6804; CSKY-NEXT:    .long __atomic_compare_exchange_8
6805;
6806  %1 = atomicrmw umin i64* %a, i64 %b acquire
6807  ret i64 %1
6808}
6809
6810define i64 @atomicrmw_umin_i64_release(i64 *%a, i64 %b) nounwind {
6811; CSKY-LABEL: atomicrmw_umin_i64_release:
6812; CSKY:       # %bb.0:
6813; CSKY-NEXT:    subi16 sp, sp, 24
6814; CSKY-NEXT:    st16.w l3, (sp, 20)
6815; CSKY-NEXT:    st16.w l2, (sp, 16)
6816; CSKY-NEXT:    st16.w l1, (sp, 12)
6817; CSKY-NEXT:    st16.w l0, (sp, 8)
6818; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
6819; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
6820; CSKY-NEXT:    subi16 sp, sp, 32
6821; CSKY-NEXT:    mov16 l0, a2
6822; CSKY-NEXT:    mov16 l1, a1
6823; CSKY-NEXT:    mov16 l2, a0
6824; CSKY-NEXT:    ld16.w a1, (a0, 4)
6825; CSKY-NEXT:    ld16.w a0, (a0, 0)
6826; CSKY-NEXT:    movi16 l3, 0
6827; CSKY-NEXT:    movi32 l4, 3
6828; CSKY-NEXT:  .LBB217_1: # %atomicrmw.start
6829; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6830; CSKY-NEXT:    cmphs16 l1, a0
6831; CSKY-NEXT:    mvc32 a2
6832; CSKY-NEXT:    st16.w a2, (sp, 16)
6833; CSKY-NEXT:    cmphs16 l0, a1
6834; CSKY-NEXT:    mvc32 a2
6835; CSKY-NEXT:    st16.w a2, (sp, 12)
6836; CSKY-NEXT:    cmpne16 a1, l0
6837; CSKY-NEXT:    mvc32 a2
6838; CSKY-NEXT:    st16.w a2, (sp, 20)
6839; CSKY-NEXT:    ld16.w a2, (sp, 16)
6840; CSKY-NEXT:    btsti32 a2, 0
6841; CSKY-NEXT:    mvc32 a2
6842; CSKY-NEXT:    ld16.w a3, (sp, 12)
6843; CSKY-NEXT:    btsti32 a3, 0
6844; CSKY-NEXT:    mvc32 a3
6845; CSKY-NEXT:    ld32.w t0, (sp, 20)
6846; CSKY-NEXT:    btsti32 t0, 0
6847; CSKY-NEXT:    movf32 a3, a2
6848; CSKY-NEXT:    btsti32 a3, 0
6849; CSKY-NEXT:    mov16 a2, l1
6850; CSKY-NEXT:    movt32 a2, a0
6851; CSKY-NEXT:    mov16 a3, l0
6852; CSKY-NEXT:    movt32 a3, a1
6853; CSKY-NEXT:    st16.w a0, (sp, 24)
6854; CSKY-NEXT:    st16.w a1, (sp, 28)
6855; CSKY-NEXT:    st16.w l3, (sp, 4)
6856; CSKY-NEXT:    st32.w l4, (sp, 0)
6857; CSKY-NEXT:    mov16 a0, l2
6858; CSKY-NEXT:    addi16 a1, sp, 24
6859; CSKY-NEXT:    jsri32 [.LCPI217_0]
6860; CSKY-NEXT:    mov16 a2, a0
6861; CSKY-NEXT:    ld16.w a1, (sp, 28)
6862; CSKY-NEXT:    ld16.w a0, (sp, 24)
6863; CSKY-NEXT:    bez32 a2, .LBB217_1
6864; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6865; CSKY-NEXT:    addi16 sp, sp, 32
6866; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
6867; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
6868; CSKY-NEXT:    ld16.w l0, (sp, 8)
6869; CSKY-NEXT:    ld16.w l1, (sp, 12)
6870; CSKY-NEXT:    ld16.w l2, (sp, 16)
6871; CSKY-NEXT:    ld16.w l3, (sp, 20)
6872; CSKY-NEXT:    addi16 sp, sp, 24
6873; CSKY-NEXT:    rts16
6874; CSKY-NEXT:    .p2align 1
6875; CSKY-NEXT:  # %bb.3:
6876; CSKY-NEXT:    .p2align 2
6877; CSKY-NEXT:  .LCPI217_0:
6878; CSKY-NEXT:    .long __atomic_compare_exchange_8
6879;
6880  %1 = atomicrmw umin i64* %a, i64 %b release
6881  ret i64 %1
6882}
6883
6884define i64 @atomicrmw_umin_i64_acq_rel(i64 *%a, i64 %b) nounwind {
6885; CSKY-LABEL: atomicrmw_umin_i64_acq_rel:
6886; CSKY:       # %bb.0:
6887; CSKY-NEXT:    subi16 sp, sp, 24
6888; CSKY-NEXT:    st16.w l3, (sp, 20)
6889; CSKY-NEXT:    st16.w l2, (sp, 16)
6890; CSKY-NEXT:    st16.w l1, (sp, 12)
6891; CSKY-NEXT:    st16.w l0, (sp, 8)
6892; CSKY-NEXT:    st32.w lr, (sp, 4) # 4-byte Folded Spill
6893; CSKY-NEXT:    st32.w l4, (sp, 0) # 4-byte Folded Spill
6894; CSKY-NEXT:    subi16 sp, sp, 32
6895; CSKY-NEXT:    mov16 l0, a2
6896; CSKY-NEXT:    mov16 l1, a1
6897; CSKY-NEXT:    mov16 l2, a0
6898; CSKY-NEXT:    ld16.w a1, (a0, 4)
6899; CSKY-NEXT:    ld16.w a0, (a0, 0)
6900; CSKY-NEXT:    movi16 l3, 2
6901; CSKY-NEXT:    movi32 l4, 4
6902; CSKY-NEXT:  .LBB218_1: # %atomicrmw.start
6903; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6904; CSKY-NEXT:    cmphs16 l1, a0
6905; CSKY-NEXT:    mvc32 a2
6906; CSKY-NEXT:    st16.w a2, (sp, 16)
6907; CSKY-NEXT:    cmphs16 l0, a1
6908; CSKY-NEXT:    mvc32 a2
6909; CSKY-NEXT:    st16.w a2, (sp, 12)
6910; CSKY-NEXT:    cmpne16 a1, l0
6911; CSKY-NEXT:    mvc32 a2
6912; CSKY-NEXT:    st16.w a2, (sp, 20)
6913; CSKY-NEXT:    ld16.w a2, (sp, 16)
6914; CSKY-NEXT:    btsti32 a2, 0
6915; CSKY-NEXT:    mvc32 a2
6916; CSKY-NEXT:    ld16.w a3, (sp, 12)
6917; CSKY-NEXT:    btsti32 a3, 0
6918; CSKY-NEXT:    mvc32 a3
6919; CSKY-NEXT:    ld32.w t0, (sp, 20)
6920; CSKY-NEXT:    btsti32 t0, 0
6921; CSKY-NEXT:    movf32 a3, a2
6922; CSKY-NEXT:    btsti32 a3, 0
6923; CSKY-NEXT:    mov16 a2, l1
6924; CSKY-NEXT:    movt32 a2, a0
6925; CSKY-NEXT:    mov16 a3, l0
6926; CSKY-NEXT:    movt32 a3, a1
6927; CSKY-NEXT:    st16.w a0, (sp, 24)
6928; CSKY-NEXT:    st16.w a1, (sp, 28)
6929; CSKY-NEXT:    st16.w l3, (sp, 4)
6930; CSKY-NEXT:    st32.w l4, (sp, 0)
6931; CSKY-NEXT:    mov16 a0, l2
6932; CSKY-NEXT:    addi16 a1, sp, 24
6933; CSKY-NEXT:    jsri32 [.LCPI218_0]
6934; CSKY-NEXT:    mov16 a2, a0
6935; CSKY-NEXT:    ld16.w a1, (sp, 28)
6936; CSKY-NEXT:    ld16.w a0, (sp, 24)
6937; CSKY-NEXT:    bez32 a2, .LBB218_1
6938; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
6939; CSKY-NEXT:    addi16 sp, sp, 32
6940; CSKY-NEXT:    ld32.w l4, (sp, 0) # 4-byte Folded Reload
6941; CSKY-NEXT:    ld32.w lr, (sp, 4) # 4-byte Folded Reload
6942; CSKY-NEXT:    ld16.w l0, (sp, 8)
6943; CSKY-NEXT:    ld16.w l1, (sp, 12)
6944; CSKY-NEXT:    ld16.w l2, (sp, 16)
6945; CSKY-NEXT:    ld16.w l3, (sp, 20)
6946; CSKY-NEXT:    addi16 sp, sp, 24
6947; CSKY-NEXT:    rts16
6948; CSKY-NEXT:    .p2align 1
6949; CSKY-NEXT:  # %bb.3:
6950; CSKY-NEXT:    .p2align 2
6951; CSKY-NEXT:  .LCPI218_0:
6952; CSKY-NEXT:    .long __atomic_compare_exchange_8
6953;
6954  %1 = atomicrmw umin i64* %a, i64 %b acq_rel
6955  ret i64 %1
6956}
6957
6958define i64 @atomicrmw_umin_i64_seq_cst(i64 *%a, i64 %b) nounwind {
6959; CSKY-LABEL: atomicrmw_umin_i64_seq_cst:
6960; CSKY:       # %bb.0:
6961; CSKY-NEXT:    subi16 sp, sp, 20
6962; CSKY-NEXT:    st16.w l3, (sp, 16)
6963; CSKY-NEXT:    st16.w l2, (sp, 12)
6964; CSKY-NEXT:    st16.w l1, (sp, 8)
6965; CSKY-NEXT:    st16.w l0, (sp, 4)
6966; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
6967; CSKY-NEXT:    subi16 sp, sp, 32
6968; CSKY-NEXT:    mov16 l0, a2
6969; CSKY-NEXT:    mov16 l1, a1
6970; CSKY-NEXT:    mov16 l2, a0
6971; CSKY-NEXT:    ld16.w a1, (a0, 4)
6972; CSKY-NEXT:    ld16.w a0, (a0, 0)
6973; CSKY-NEXT:    movi16 l3, 5
6974; CSKY-NEXT:  .LBB219_1: # %atomicrmw.start
6975; CSKY-NEXT:    # =>This Inner Loop Header: Depth=1
6976; CSKY-NEXT:    cmphs16 l1, a0
6977; CSKY-NEXT:    mvc32 a2
6978; CSKY-NEXT:    st16.w a2, (sp, 16)
6979; CSKY-NEXT:    cmphs16 l0, a1
6980; CSKY-NEXT:    mvc32 a2
6981; CSKY-NEXT:    st16.w a2, (sp, 12)
6982; CSKY-NEXT:    cmpne16 a1, l0
6983; CSKY-NEXT:    mvc32 a2
6984; CSKY-NEXT:    st16.w a2, (sp, 20)
6985; CSKY-NEXT:    ld16.w a2, (sp, 16)
6986; CSKY-NEXT:    btsti32 a2, 0
6987; CSKY-NEXT:    mvc32 a2
6988; CSKY-NEXT:    ld16.w a3, (sp, 12)
6989; CSKY-NEXT:    btsti32 a3, 0
6990; CSKY-NEXT:    mvc32 a3
6991; CSKY-NEXT:    ld32.w t0, (sp, 20)
6992; CSKY-NEXT:    btsti32 t0, 0
6993; CSKY-NEXT:    movf32 a3, a2
6994; CSKY-NEXT:    btsti32 a3, 0
6995; CSKY-NEXT:    mov16 a2, l1
6996; CSKY-NEXT:    movt32 a2, a0
6997; CSKY-NEXT:    mov16 a3, l0
6998; CSKY-NEXT:    movt32 a3, a1
6999; CSKY-NEXT:    st16.w a0, (sp, 24)
7000; CSKY-NEXT:    st16.w a1, (sp, 28)
7001; CSKY-NEXT:    st16.w l3, (sp, 4)
7002; CSKY-NEXT:    st16.w l3, (sp, 0)
7003; CSKY-NEXT:    mov16 a0, l2
7004; CSKY-NEXT:    addi16 a1, sp, 24
7005; CSKY-NEXT:    jsri32 [.LCPI219_0]
7006; CSKY-NEXT:    mov16 a2, a0
7007; CSKY-NEXT:    ld16.w a1, (sp, 28)
7008; CSKY-NEXT:    ld16.w a0, (sp, 24)
7009; CSKY-NEXT:    bez32 a2, .LBB219_1
7010; CSKY-NEXT:  # %bb.2: # %atomicrmw.end
7011; CSKY-NEXT:    addi16 sp, sp, 32
7012; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
7013; CSKY-NEXT:    ld16.w l0, (sp, 4)
7014; CSKY-NEXT:    ld16.w l1, (sp, 8)
7015; CSKY-NEXT:    ld16.w l2, (sp, 12)
7016; CSKY-NEXT:    ld16.w l3, (sp, 16)
7017; CSKY-NEXT:    addi16 sp, sp, 20
7018; CSKY-NEXT:    rts16
7019; CSKY-NEXT:    .p2align 1
7020; CSKY-NEXT:  # %bb.3:
7021; CSKY-NEXT:    .p2align 2
7022; CSKY-NEXT:  .LCPI219_0:
7023; CSKY-NEXT:    .long __atomic_compare_exchange_8
7024;
7025  %1 = atomicrmw umin i64* %a, i64 %b seq_cst
7026  ret i64 %1
7027}
7028