xref: /llvm-project/llvm/test/CodeGen/AVR/atomics/store.ll (revision 9ef1d37ffb5f56a9b949a6307bbb16c2ea0130e3)
1; RUN: llc -mattr=avr6 < %s -mtriple=avr | FileCheck %s
2
3; CHECK-LABEL: atomic_store8
4; CHECK:      in r0, 63
5; CHECK-NEXT: cli
6; CHECK-NEXT: st [[RD:(X|Y|Z)]], [[RR:r[0-9]+]]
7; CHECK-NEXT: out 63, r0
8define void @atomic_store8(ptr %foo) {
9  store atomic i8 1, ptr %foo unordered, align 1
10  ret void
11}
12
13; CHECK-LABEL: atomic_store16
14; CHECK:      in r0, 63
15; CHECK-NEXT: cli
16; CHECK-NEXT: std [[RD:(X|Y|Z)]]+1, [[RR:r[0-9]+]]
17; CHECK-NEXT: st [[RD]], [[RR:r[0-9]+]]
18; CHECK-NEXT: out 63, r0
19define void @atomic_store16(ptr %foo) {
20  store atomic i16 1, ptr %foo unordered, align 2
21  ret void
22}
23
24; CHECK-LABEL: atomic_store32
25; CHECK: call __sync_lock_test_and_set_4
26define void @atomic_store32(ptr %foo) {
27  store atomic i32 1, ptr %foo unordered, align 4
28  ret void
29}
30
31; CHECK-LABEL: atomic_store64
32; CHECK: call __sync_lock_test_and_set_8
33define void @atomic_store64(ptr %foo) {
34  store atomic i64 1, ptr %foo unordered, align 8
35  ret void
36}
37
38