xref: /llvm-project/llvm/test/CodeGen/AVR/inline-asm/loadstore.ll (revision dba0861cd7aa2717b0f36c76d77c097765f6ad57)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=avr | FileCheck %s
3
4define i8 @loadx(ptr %0) {
5; CHECK-LABEL: loadx:
6; CHECK:       ; %bb.0:
7; CHECK-NEXT:    mov r26, r24
8; CHECK-NEXT:    mov r27, r25
9; CHECK-NEXT:    ;APP
10; CHECK-NEXT:    ld r24, X
11; CHECK-NEXT:    ;NO_APP
12; CHECK-NEXT:    ret
13  %2 = tail call i8 asm sideeffect "ld $0, ${1:a}", "=r,x"(ptr %0)
14  ret i8 %2
15}
16
17define i8 @loady(ptr %0) {
18; CHECK-LABEL: loady:
19; CHECK:       ; %bb.0:
20; CHECK-NEXT:    push r28
21; CHECK-NEXT:    push r29
22; CHECK-NEXT:    mov r28, r24
23; CHECK-NEXT:    mov r29, r25
24; CHECK-NEXT:    ;APP
25; CHECK-NEXT:    ld r24, Y
26; CHECK-NEXT:    ;NO_APP
27; CHECK-NEXT:    pop r29
28; CHECK-NEXT:    pop r28
29; CHECK-NEXT:    ret
30  %2 = tail call i8 asm sideeffect "ld $0, ${1:a}", "=r,y"(ptr %0)
31  ret i8 %2
32}
33
34define i8 @loadz(ptr %0) {
35; CHECK-LABEL: loadz:
36; CHECK:       ; %bb.0:
37; CHECK-NEXT:    mov r30, r24
38; CHECK-NEXT:    mov r31, r25
39; CHECK-NEXT:    ;APP
40; CHECK-NEXT:    ld r24, Z
41; CHECK-NEXT:    ;NO_APP
42; CHECK-NEXT:    ret
43  %2 = tail call i8 asm sideeffect "ld $0, ${1:a}", "=r,z"(ptr %0)
44  ret i8 %2
45}
46
47define i8 @load_ptr_imm() {
48; CHECK-LABEL: load_ptr_imm:
49; CHECK:       ; %bb.0:
50; CHECK-NEXT:    ldi r26, 210
51; CHECK-NEXT:    ldi r27, 4
52; CHECK-NEXT:    ;APP
53; CHECK-NEXT:    ld r24, X
54; CHECK-NEXT:    ;NO_APP
55; CHECK-NEXT:    ret
56  %1 = tail call i8 asm sideeffect "ld $0, $1", "=r,e"(i16 1234)
57  ret i8 %1
58}
59
60define void @storex(ptr %0, i8 %1) {
61; CHECK-LABEL: storex:
62; CHECK:       ; %bb.0:
63; CHECK-NEXT:    mov r26, r24
64; CHECK-NEXT:    mov r27, r25
65; CHECK-NEXT:    ;APP
66; CHECK-NEXT:    st X, r22
67; CHECK-NEXT:    ;NO_APP
68; CHECK-NEXT:    ret
69  tail call void asm sideeffect "st ${0:a}, $1", "x,r"(ptr %0, i8 %1)
70  ret void
71}
72
73define void @storey(ptr %0, i8 %1) {
74; CHECK-LABEL: storey:
75; CHECK:       ; %bb.0:
76; CHECK-NEXT:    push r28
77; CHECK-NEXT:    push r29
78; CHECK-NEXT:    mov r28, r24
79; CHECK-NEXT:    mov r29, r25
80; CHECK-NEXT:    ;APP
81; CHECK-NEXT:    st Y, r22
82; CHECK-NEXT:    ;NO_APP
83; CHECK-NEXT:    pop r29
84; CHECK-NEXT:    pop r28
85; CHECK-NEXT:    ret
86  tail call void asm sideeffect "st ${0:a}, $1", "y,r"(ptr %0, i8 %1)
87  ret void
88}
89
90define void @storez(ptr %0, i8 %1) {
91; CHECK-LABEL: storez:
92; CHECK:       ; %bb.0:
93; CHECK-NEXT:    mov r30, r24
94; CHECK-NEXT:    mov r31, r25
95; CHECK-NEXT:    ;APP
96; CHECK-NEXT:    st Z, r22
97; CHECK-NEXT:    ;NO_APP
98; CHECK-NEXT:    ret
99  tail call void asm sideeffect "st ${0:a}, $1", "z,r"(ptr %0, i8 %1)
100  ret void
101}
102
103define void @store_ptr_imm(i8 %0) {
104; CHECK-LABEL: store_ptr_imm:
105; CHECK:       ; %bb.0:
106; CHECK-NEXT:    ldi r26, 210
107; CHECK-NEXT:    ldi r27, 4
108; CHECK-NEXT:    ;APP
109; CHECK-NEXT:    st X, r24
110; CHECK-NEXT:    ;NO_APP
111; CHECK-NEXT:    ret
112  tail call void asm sideeffect "st $0, $1", "e,r"(i16 1234, i8 %0)
113  ret void
114}
115