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