xref: /llvm-project/llvm/test/CodeGen/CSKY/atomic-load-store.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 @atomic_load_i8_unordered(ptr %a) nounwind {
6; CSKY-LABEL: atomic_load_i8_unordered:
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 a1, 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_load_1
20;
21  %1 = load atomic i8, ptr %a unordered, align 1
22  ret i8 %1
23}
24
25define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {
26; CSKY-LABEL: atomic_load_i8_monotonic:
27; CSKY:       # %bb.0:
28; CSKY-NEXT:    subi16 sp, sp, 4
29; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
30; CSKY-NEXT:    movi16 a1, 0
31; CSKY-NEXT:    jsri32 [.LCPI1_0]
32; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
33; CSKY-NEXT:    addi16 sp, sp, 4
34; CSKY-NEXT:    rts16
35; CSKY-NEXT:    .p2align 1
36; CSKY-NEXT:  # %bb.1:
37; CSKY-NEXT:    .p2align 2
38; CSKY-NEXT:  .LCPI1_0:
39; CSKY-NEXT:    .long __atomic_load_1
40;
41  %1 = load atomic i8, ptr %a monotonic, align 1
42  ret i8 %1
43}
44
45define i8 @atomic_load_i8_acquire(ptr %a) nounwind {
46; CSKY-LABEL: atomic_load_i8_acquire:
47; CSKY:       # %bb.0:
48; CSKY-NEXT:    subi16 sp, sp, 4
49; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
50; CSKY-NEXT:    movi16 a1, 2
51; CSKY-NEXT:    jsri32 [.LCPI2_0]
52; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
53; CSKY-NEXT:    addi16 sp, sp, 4
54; CSKY-NEXT:    rts16
55; CSKY-NEXT:    .p2align 1
56; CSKY-NEXT:  # %bb.1:
57; CSKY-NEXT:    .p2align 2
58; CSKY-NEXT:  .LCPI2_0:
59; CSKY-NEXT:    .long __atomic_load_1
60;
61  %1 = load atomic i8, ptr %a acquire, align 1
62  ret i8 %1
63}
64
65define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {
66; CSKY-LABEL: atomic_load_i8_seq_cst:
67; CSKY:       # %bb.0:
68; CSKY-NEXT:    subi16 sp, sp, 4
69; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
70; CSKY-NEXT:    movi16 a1, 5
71; CSKY-NEXT:    jsri32 [.LCPI3_0]
72; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
73; CSKY-NEXT:    addi16 sp, sp, 4
74; CSKY-NEXT:    rts16
75; CSKY-NEXT:    .p2align 1
76; CSKY-NEXT:  # %bb.1:
77; CSKY-NEXT:    .p2align 2
78; CSKY-NEXT:  .LCPI3_0:
79; CSKY-NEXT:    .long __atomic_load_1
80;
81  %1 = load atomic i8, ptr %a seq_cst, align 1
82  ret i8 %1
83}
84
85define i16 @atomic_load_i16_unordered(ptr %a) nounwind {
86; CSKY-LABEL: atomic_load_i16_unordered:
87; CSKY:       # %bb.0:
88; CSKY-NEXT:    subi16 sp, sp, 4
89; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
90; CSKY-NEXT:    movi16 a1, 0
91; CSKY-NEXT:    jsri32 [.LCPI4_0]
92; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
93; CSKY-NEXT:    addi16 sp, sp, 4
94; CSKY-NEXT:    rts16
95; CSKY-NEXT:    .p2align 1
96; CSKY-NEXT:  # %bb.1:
97; CSKY-NEXT:    .p2align 2
98; CSKY-NEXT:  .LCPI4_0:
99; CSKY-NEXT:    .long __atomic_load_2
100;
101  %1 = load atomic i16, ptr %a unordered, align 2
102  ret i16 %1
103}
104
105define i16 @atomic_load_i16_monotonic(ptr %a) nounwind {
106; CSKY-LABEL: atomic_load_i16_monotonic:
107; CSKY:       # %bb.0:
108; CSKY-NEXT:    subi16 sp, sp, 4
109; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
110; CSKY-NEXT:    movi16 a1, 0
111; CSKY-NEXT:    jsri32 [.LCPI5_0]
112; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
113; CSKY-NEXT:    addi16 sp, sp, 4
114; CSKY-NEXT:    rts16
115; CSKY-NEXT:    .p2align 1
116; CSKY-NEXT:  # %bb.1:
117; CSKY-NEXT:    .p2align 2
118; CSKY-NEXT:  .LCPI5_0:
119; CSKY-NEXT:    .long __atomic_load_2
120;
121  %1 = load atomic i16, ptr %a monotonic, align 2
122  ret i16 %1
123}
124
125define i16 @atomic_load_i16_acquire(ptr %a) nounwind {
126; CSKY-LABEL: atomic_load_i16_acquire:
127; CSKY:       # %bb.0:
128; CSKY-NEXT:    subi16 sp, sp, 4
129; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
130; CSKY-NEXT:    movi16 a1, 2
131; CSKY-NEXT:    jsri32 [.LCPI6_0]
132; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
133; CSKY-NEXT:    addi16 sp, sp, 4
134; CSKY-NEXT:    rts16
135; CSKY-NEXT:    .p2align 1
136; CSKY-NEXT:  # %bb.1:
137; CSKY-NEXT:    .p2align 2
138; CSKY-NEXT:  .LCPI6_0:
139; CSKY-NEXT:    .long __atomic_load_2
140;
141  %1 = load atomic i16, ptr %a acquire, align 2
142  ret i16 %1
143}
144
145define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind {
146; CSKY-LABEL: atomic_load_i16_seq_cst:
147; CSKY:       # %bb.0:
148; CSKY-NEXT:    subi16 sp, sp, 4
149; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
150; CSKY-NEXT:    movi16 a1, 5
151; CSKY-NEXT:    jsri32 [.LCPI7_0]
152; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
153; CSKY-NEXT:    addi16 sp, sp, 4
154; CSKY-NEXT:    rts16
155; CSKY-NEXT:    .p2align 1
156; CSKY-NEXT:  # %bb.1:
157; CSKY-NEXT:    .p2align 2
158; CSKY-NEXT:  .LCPI7_0:
159; CSKY-NEXT:    .long __atomic_load_2
160;
161  %1 = load atomic i16, ptr %a seq_cst, align 2
162  ret i16 %1
163}
164
165define i32 @atomic_load_i32_unordered(ptr %a) nounwind {
166; CSKY-LABEL: atomic_load_i32_unordered:
167; CSKY:       # %bb.0:
168; CSKY-NEXT:    subi16 sp, sp, 4
169; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
170; CSKY-NEXT:    movi16 a1, 0
171; CSKY-NEXT:    jsri32 [.LCPI8_0]
172; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
173; CSKY-NEXT:    addi16 sp, sp, 4
174; CSKY-NEXT:    rts16
175; CSKY-NEXT:    .p2align 1
176; CSKY-NEXT:  # %bb.1:
177; CSKY-NEXT:    .p2align 2
178; CSKY-NEXT:  .LCPI8_0:
179; CSKY-NEXT:    .long __atomic_load_4
180;
181  %1 = load atomic i32, ptr %a unordered, align 4
182  ret i32 %1
183}
184
185define i32 @atomic_load_i32_monotonic(ptr %a) nounwind {
186; CSKY-LABEL: atomic_load_i32_monotonic:
187; CSKY:       # %bb.0:
188; CSKY-NEXT:    subi16 sp, sp, 4
189; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
190; CSKY-NEXT:    movi16 a1, 0
191; CSKY-NEXT:    jsri32 [.LCPI9_0]
192; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
193; CSKY-NEXT:    addi16 sp, sp, 4
194; CSKY-NEXT:    rts16
195; CSKY-NEXT:    .p2align 1
196; CSKY-NEXT:  # %bb.1:
197; CSKY-NEXT:    .p2align 2
198; CSKY-NEXT:  .LCPI9_0:
199; CSKY-NEXT:    .long __atomic_load_4
200;
201  %1 = load atomic i32, ptr %a monotonic, align 4
202  ret i32 %1
203}
204
205define i32 @atomic_load_i32_acquire(ptr %a) nounwind {
206; CSKY-LABEL: atomic_load_i32_acquire:
207; CSKY:       # %bb.0:
208; CSKY-NEXT:    subi16 sp, sp, 4
209; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
210; CSKY-NEXT:    movi16 a1, 2
211; CSKY-NEXT:    jsri32 [.LCPI10_0]
212; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
213; CSKY-NEXT:    addi16 sp, sp, 4
214; CSKY-NEXT:    rts16
215; CSKY-NEXT:    .p2align 1
216; CSKY-NEXT:  # %bb.1:
217; CSKY-NEXT:    .p2align 2
218; CSKY-NEXT:  .LCPI10_0:
219; CSKY-NEXT:    .long __atomic_load_4
220;
221  %1 = load atomic i32, ptr %a acquire, align 4
222  ret i32 %1
223}
224
225define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind {
226; CSKY-LABEL: atomic_load_i32_seq_cst:
227; CSKY:       # %bb.0:
228; CSKY-NEXT:    subi16 sp, sp, 4
229; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
230; CSKY-NEXT:    movi16 a1, 5
231; CSKY-NEXT:    jsri32 [.LCPI11_0]
232; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
233; CSKY-NEXT:    addi16 sp, sp, 4
234; CSKY-NEXT:    rts16
235; CSKY-NEXT:    .p2align 1
236; CSKY-NEXT:  # %bb.1:
237; CSKY-NEXT:    .p2align 2
238; CSKY-NEXT:  .LCPI11_0:
239; CSKY-NEXT:    .long __atomic_load_4
240;
241  %1 = load atomic i32, ptr %a seq_cst, align 4
242  ret i32 %1
243}
244
245define i64 @atomic_load_i64_unordered(ptr %a) nounwind {
246; CSKY-LABEL: atomic_load_i64_unordered:
247; CSKY:       # %bb.0:
248; CSKY-NEXT:    subi16 sp, sp, 4
249; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
250; CSKY-NEXT:    movi16 a1, 0
251; CSKY-NEXT:    jsri32 [.LCPI12_0]
252; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
253; CSKY-NEXT:    addi16 sp, sp, 4
254; CSKY-NEXT:    rts16
255; CSKY-NEXT:    .p2align 1
256; CSKY-NEXT:  # %bb.1:
257; CSKY-NEXT:    .p2align 2
258; CSKY-NEXT:  .LCPI12_0:
259; CSKY-NEXT:    .long __atomic_load_8
260;
261  %1 = load atomic i64, ptr %a unordered, align 8
262  ret i64 %1
263}
264
265define i64 @atomic_load_i64_monotonic(ptr %a) nounwind {
266; CSKY-LABEL: atomic_load_i64_monotonic:
267; CSKY:       # %bb.0:
268; CSKY-NEXT:    subi16 sp, sp, 4
269; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
270; CSKY-NEXT:    movi16 a1, 0
271; CSKY-NEXT:    jsri32 [.LCPI13_0]
272; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
273; CSKY-NEXT:    addi16 sp, sp, 4
274; CSKY-NEXT:    rts16
275; CSKY-NEXT:    .p2align 1
276; CSKY-NEXT:  # %bb.1:
277; CSKY-NEXT:    .p2align 2
278; CSKY-NEXT:  .LCPI13_0:
279; CSKY-NEXT:    .long __atomic_load_8
280;
281  %1 = load atomic i64, ptr %a monotonic, align 8
282  ret i64 %1
283}
284
285define i64 @atomic_load_i64_acquire(ptr %a) nounwind {
286; CSKY-LABEL: atomic_load_i64_acquire:
287; CSKY:       # %bb.0:
288; CSKY-NEXT:    subi16 sp, sp, 4
289; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
290; CSKY-NEXT:    movi16 a1, 2
291; CSKY-NEXT:    jsri32 [.LCPI14_0]
292; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
293; CSKY-NEXT:    addi16 sp, sp, 4
294; CSKY-NEXT:    rts16
295; CSKY-NEXT:    .p2align 1
296; CSKY-NEXT:  # %bb.1:
297; CSKY-NEXT:    .p2align 2
298; CSKY-NEXT:  .LCPI14_0:
299; CSKY-NEXT:    .long __atomic_load_8
300;
301  %1 = load atomic i64, ptr %a acquire, align 8
302  ret i64 %1
303}
304
305define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind {
306; CSKY-LABEL: atomic_load_i64_seq_cst:
307; CSKY:       # %bb.0:
308; CSKY-NEXT:    subi16 sp, sp, 4
309; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
310; CSKY-NEXT:    movi16 a1, 5
311; CSKY-NEXT:    jsri32 [.LCPI15_0]
312; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
313; CSKY-NEXT:    addi16 sp, sp, 4
314; CSKY-NEXT:    rts16
315; CSKY-NEXT:    .p2align 1
316; CSKY-NEXT:  # %bb.1:
317; CSKY-NEXT:    .p2align 2
318; CSKY-NEXT:  .LCPI15_0:
319; CSKY-NEXT:    .long __atomic_load_8
320;
321  %1 = load atomic i64, ptr %a seq_cst, align 8
322  ret i64 %1
323}
324
325define void @atomic_store_i8_unordered(ptr %a, i8 %b) nounwind {
326; CSKY-LABEL: atomic_store_i8_unordered:
327; CSKY:       # %bb.0:
328; CSKY-NEXT:    subi16 sp, sp, 4
329; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
330; CSKY-NEXT:    movi16 a2, 0
331; CSKY-NEXT:    jsri32 [.LCPI16_0]
332; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
333; CSKY-NEXT:    addi16 sp, sp, 4
334; CSKY-NEXT:    rts16
335; CSKY-NEXT:    .p2align 1
336; CSKY-NEXT:  # %bb.1:
337; CSKY-NEXT:    .p2align 2
338; CSKY-NEXT:  .LCPI16_0:
339; CSKY-NEXT:    .long __atomic_store_1
340;
341  store atomic i8 %b, ptr %a unordered, align 1
342  ret void
343}
344
345define void @atomic_store_i8_monotonic(ptr %a, i8 %b) nounwind {
346; CSKY-LABEL: atomic_store_i8_monotonic:
347; CSKY:       # %bb.0:
348; CSKY-NEXT:    subi16 sp, sp, 4
349; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
350; CSKY-NEXT:    movi16 a2, 0
351; CSKY-NEXT:    jsri32 [.LCPI17_0]
352; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
353; CSKY-NEXT:    addi16 sp, sp, 4
354; CSKY-NEXT:    rts16
355; CSKY-NEXT:    .p2align 1
356; CSKY-NEXT:  # %bb.1:
357; CSKY-NEXT:    .p2align 2
358; CSKY-NEXT:  .LCPI17_0:
359; CSKY-NEXT:    .long __atomic_store_1
360;
361  store atomic i8 %b, ptr %a monotonic, align 1
362  ret void
363}
364
365define void @atomic_store_i8_release(ptr %a, i8 %b) nounwind {
366; CSKY-LABEL: atomic_store_i8_release:
367; CSKY:       # %bb.0:
368; CSKY-NEXT:    subi16 sp, sp, 4
369; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
370; CSKY-NEXT:    movi16 a2, 3
371; CSKY-NEXT:    jsri32 [.LCPI18_0]
372; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
373; CSKY-NEXT:    addi16 sp, sp, 4
374; CSKY-NEXT:    rts16
375; CSKY-NEXT:    .p2align 1
376; CSKY-NEXT:  # %bb.1:
377; CSKY-NEXT:    .p2align 2
378; CSKY-NEXT:  .LCPI18_0:
379; CSKY-NEXT:    .long __atomic_store_1
380;
381  store atomic i8 %b, ptr %a release, align 1
382  ret void
383}
384
385define void @atomic_store_i8_seq_cst(ptr %a, i8 %b) nounwind {
386; CSKY-LABEL: atomic_store_i8_seq_cst:
387; CSKY:       # %bb.0:
388; CSKY-NEXT:    subi16 sp, sp, 4
389; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
390; CSKY-NEXT:    movi16 a2, 5
391; CSKY-NEXT:    jsri32 [.LCPI19_0]
392; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
393; CSKY-NEXT:    addi16 sp, sp, 4
394; CSKY-NEXT:    rts16
395; CSKY-NEXT:    .p2align 1
396; CSKY-NEXT:  # %bb.1:
397; CSKY-NEXT:    .p2align 2
398; CSKY-NEXT:  .LCPI19_0:
399; CSKY-NEXT:    .long __atomic_store_1
400;
401  store atomic i8 %b, ptr %a seq_cst, align 1
402  ret void
403}
404
405define void @atomic_store_i16_unordered(ptr %a, i16 %b) nounwind {
406; CSKY-LABEL: atomic_store_i16_unordered:
407; CSKY:       # %bb.0:
408; CSKY-NEXT:    subi16 sp, sp, 4
409; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
410; CSKY-NEXT:    movi16 a2, 0
411; CSKY-NEXT:    jsri32 [.LCPI20_0]
412; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
413; CSKY-NEXT:    addi16 sp, sp, 4
414; CSKY-NEXT:    rts16
415; CSKY-NEXT:    .p2align 1
416; CSKY-NEXT:  # %bb.1:
417; CSKY-NEXT:    .p2align 2
418; CSKY-NEXT:  .LCPI20_0:
419; CSKY-NEXT:    .long __atomic_store_2
420;
421  store atomic i16 %b, ptr %a unordered, align 2
422  ret void
423}
424
425define void @atomic_store_i16_monotonic(ptr %a, i16 %b) nounwind {
426; CSKY-LABEL: atomic_store_i16_monotonic:
427; CSKY:       # %bb.0:
428; CSKY-NEXT:    subi16 sp, sp, 4
429; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
430; CSKY-NEXT:    movi16 a2, 0
431; CSKY-NEXT:    jsri32 [.LCPI21_0]
432; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
433; CSKY-NEXT:    addi16 sp, sp, 4
434; CSKY-NEXT:    rts16
435; CSKY-NEXT:    .p2align 1
436; CSKY-NEXT:  # %bb.1:
437; CSKY-NEXT:    .p2align 2
438; CSKY-NEXT:  .LCPI21_0:
439; CSKY-NEXT:    .long __atomic_store_2
440;
441  store atomic i16 %b, ptr %a monotonic, align 2
442  ret void
443}
444
445define void @atomic_store_i16_release(ptr %a, i16 %b) nounwind {
446; CSKY-LABEL: atomic_store_i16_release:
447; CSKY:       # %bb.0:
448; CSKY-NEXT:    subi16 sp, sp, 4
449; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
450; CSKY-NEXT:    movi16 a2, 3
451; CSKY-NEXT:    jsri32 [.LCPI22_0]
452; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
453; CSKY-NEXT:    addi16 sp, sp, 4
454; CSKY-NEXT:    rts16
455; CSKY-NEXT:    .p2align 1
456; CSKY-NEXT:  # %bb.1:
457; CSKY-NEXT:    .p2align 2
458; CSKY-NEXT:  .LCPI22_0:
459; CSKY-NEXT:    .long __atomic_store_2
460;
461  store atomic i16 %b, ptr %a release, align 2
462  ret void
463}
464
465define void @atomic_store_i16_seq_cst(ptr %a, i16 %b) nounwind {
466; CSKY-LABEL: atomic_store_i16_seq_cst:
467; CSKY:       # %bb.0:
468; CSKY-NEXT:    subi16 sp, sp, 4
469; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
470; CSKY-NEXT:    movi16 a2, 5
471; CSKY-NEXT:    jsri32 [.LCPI23_0]
472; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
473; CSKY-NEXT:    addi16 sp, sp, 4
474; CSKY-NEXT:    rts16
475; CSKY-NEXT:    .p2align 1
476; CSKY-NEXT:  # %bb.1:
477; CSKY-NEXT:    .p2align 2
478; CSKY-NEXT:  .LCPI23_0:
479; CSKY-NEXT:    .long __atomic_store_2
480;
481  store atomic i16 %b, ptr %a seq_cst, align 2
482  ret void
483}
484
485define void @atomic_store_i32_unordered(ptr %a, i32 %b) nounwind {
486; CSKY-LABEL: atomic_store_i32_unordered:
487; CSKY:       # %bb.0:
488; CSKY-NEXT:    subi16 sp, sp, 4
489; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
490; CSKY-NEXT:    movi16 a2, 0
491; CSKY-NEXT:    jsri32 [.LCPI24_0]
492; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
493; CSKY-NEXT:    addi16 sp, sp, 4
494; CSKY-NEXT:    rts16
495; CSKY-NEXT:    .p2align 1
496; CSKY-NEXT:  # %bb.1:
497; CSKY-NEXT:    .p2align 2
498; CSKY-NEXT:  .LCPI24_0:
499; CSKY-NEXT:    .long __atomic_store_4
500;
501  store atomic i32 %b, ptr %a unordered, align 4
502  ret void
503}
504
505define void @atomic_store_i32_monotonic(ptr %a, i32 %b) nounwind {
506; CSKY-LABEL: atomic_store_i32_monotonic:
507; CSKY:       # %bb.0:
508; CSKY-NEXT:    subi16 sp, sp, 4
509; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
510; CSKY-NEXT:    movi16 a2, 0
511; CSKY-NEXT:    jsri32 [.LCPI25_0]
512; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
513; CSKY-NEXT:    addi16 sp, sp, 4
514; CSKY-NEXT:    rts16
515; CSKY-NEXT:    .p2align 1
516; CSKY-NEXT:  # %bb.1:
517; CSKY-NEXT:    .p2align 2
518; CSKY-NEXT:  .LCPI25_0:
519; CSKY-NEXT:    .long __atomic_store_4
520;
521  store atomic i32 %b, ptr %a monotonic, align 4
522  ret void
523}
524
525define void @atomic_store_i32_release(ptr %a, i32 %b) nounwind {
526; CSKY-LABEL: atomic_store_i32_release:
527; CSKY:       # %bb.0:
528; CSKY-NEXT:    subi16 sp, sp, 4
529; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
530; CSKY-NEXT:    movi16 a2, 3
531; CSKY-NEXT:    jsri32 [.LCPI26_0]
532; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
533; CSKY-NEXT:    addi16 sp, sp, 4
534; CSKY-NEXT:    rts16
535; CSKY-NEXT:    .p2align 1
536; CSKY-NEXT:  # %bb.1:
537; CSKY-NEXT:    .p2align 2
538; CSKY-NEXT:  .LCPI26_0:
539; CSKY-NEXT:    .long __atomic_store_4
540;
541  store atomic i32 %b, ptr %a release, align 4
542  ret void
543}
544
545define void @atomic_store_i32_seq_cst(ptr %a, i32 %b) nounwind {
546; CSKY-LABEL: atomic_store_i32_seq_cst:
547; CSKY:       # %bb.0:
548; CSKY-NEXT:    subi16 sp, sp, 4
549; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
550; CSKY-NEXT:    movi16 a2, 5
551; CSKY-NEXT:    jsri32 [.LCPI27_0]
552; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
553; CSKY-NEXT:    addi16 sp, sp, 4
554; CSKY-NEXT:    rts16
555; CSKY-NEXT:    .p2align 1
556; CSKY-NEXT:  # %bb.1:
557; CSKY-NEXT:    .p2align 2
558; CSKY-NEXT:  .LCPI27_0:
559; CSKY-NEXT:    .long __atomic_store_4
560;
561  store atomic i32 %b, ptr %a seq_cst, align 4
562  ret void
563}
564
565define void @atomic_store_i64_unordered(ptr %a, i64 %b) nounwind {
566; CSKY-LABEL: atomic_store_i64_unordered:
567; CSKY:       # %bb.0:
568; CSKY-NEXT:    subi16 sp, sp, 4
569; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
570; CSKY-NEXT:    movi16 a3, 0
571; CSKY-NEXT:    jsri32 [.LCPI28_0]
572; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
573; CSKY-NEXT:    addi16 sp, sp, 4
574; CSKY-NEXT:    rts16
575; CSKY-NEXT:    .p2align 1
576; CSKY-NEXT:  # %bb.1:
577; CSKY-NEXT:    .p2align 2
578; CSKY-NEXT:  .LCPI28_0:
579; CSKY-NEXT:    .long __atomic_store_8
580;
581  store atomic i64 %b, ptr %a unordered, align 8
582  ret void
583}
584
585define void @atomic_store_i64_monotonic(ptr %a, i64 %b) nounwind {
586; CSKY-LABEL: atomic_store_i64_monotonic:
587; CSKY:       # %bb.0:
588; CSKY-NEXT:    subi16 sp, sp, 4
589; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
590; CSKY-NEXT:    movi16 a3, 0
591; CSKY-NEXT:    jsri32 [.LCPI29_0]
592; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
593; CSKY-NEXT:    addi16 sp, sp, 4
594; CSKY-NEXT:    rts16
595; CSKY-NEXT:    .p2align 1
596; CSKY-NEXT:  # %bb.1:
597; CSKY-NEXT:    .p2align 2
598; CSKY-NEXT:  .LCPI29_0:
599; CSKY-NEXT:    .long __atomic_store_8
600;
601  store atomic i64 %b, ptr %a monotonic, align 8
602  ret void
603}
604
605define void @atomic_store_i64_release(ptr %a, i64 %b) nounwind {
606; CSKY-LABEL: atomic_store_i64_release:
607; CSKY:       # %bb.0:
608; CSKY-NEXT:    subi16 sp, sp, 4
609; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
610; CSKY-NEXT:    movi16 a3, 3
611; CSKY-NEXT:    jsri32 [.LCPI30_0]
612; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
613; CSKY-NEXT:    addi16 sp, sp, 4
614; CSKY-NEXT:    rts16
615; CSKY-NEXT:    .p2align 1
616; CSKY-NEXT:  # %bb.1:
617; CSKY-NEXT:    .p2align 2
618; CSKY-NEXT:  .LCPI30_0:
619; CSKY-NEXT:    .long __atomic_store_8
620;
621  store atomic i64 %b, ptr %a release, align 8
622  ret void
623}
624
625define void @atomic_store_i64_seq_cst(ptr %a, i64 %b) nounwind {
626; CSKY-LABEL: atomic_store_i64_seq_cst:
627; CSKY:       # %bb.0:
628; CSKY-NEXT:    subi16 sp, sp, 4
629; CSKY-NEXT:    st32.w lr, (sp, 0) # 4-byte Folded Spill
630; CSKY-NEXT:    movi16 a3, 5
631; CSKY-NEXT:    jsri32 [.LCPI31_0]
632; CSKY-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
633; CSKY-NEXT:    addi16 sp, sp, 4
634; CSKY-NEXT:    rts16
635; CSKY-NEXT:    .p2align 1
636; CSKY-NEXT:  # %bb.1:
637; CSKY-NEXT:    .p2align 2
638; CSKY-NEXT:  .LCPI31_0:
639; CSKY-NEXT:    .long __atomic_store_8
640;
641  store atomic i64 %b, ptr %a seq_cst, align 8
642  ret void
643}
644