xref: /llvm-project/llvm/test/CodeGen/AVR/std-immediate-overflow.ll (revision 9ef1d37ffb5f56a9b949a6307bbb16c2ea0130e3)
1; RUN: llc -mtriple=avr -filetype=asm -O1 < %s | FileCheck %s
2
3define void @check60(ptr %1) {
4; CHECK-LABEL: check60:
5; CHECK-NEXT: %bb.0
6; CHECK-NEXT: ldi r18, 0
7; CHECK-NEXT: ldi r19, 0
8; CHECK-NEXT: mov r30, r24
9; CHECK-NEXT: mov r31, r25
10; CHECK-NEXT: std Z+63, r19
11; CHECK-NEXT: std Z+62, r18
12; CHECK-NEXT: ldi r24, 210
13; CHECK-NEXT: ldi r25, 4
14; CHECK-NEXT: std Z+61, r25
15; CHECK-NEXT: std Z+60, r24
16; CHECK-NEXT: ret
17
18bb0:
19  %2 = getelementptr i8, ptr %1, i8 60
20  store i32 1234, ptr %2
21  ret void
22}
23
24define void @check61(ptr %1) {
25; CHECK-LABEL: check61:
26; CHECK-NEXT: %bb.0
27; CHECK-NEXT: ldi r18, 210
28; CHECK-NEXT: ldi r19, 4
29; CHECK-NEXT: mov r30, r24
30; CHECK-NEXT: mov r31, r25
31; CHECK-NEXT: std Z+62, r19
32; CHECK-NEXT: std Z+61, r18
33; CHECK-NEXT: adiw r24, 63
34; CHECK-NEXT: ldi r18, 0
35; CHECK-NEXT: ldi r19, 0
36; CHECK-NEXT: mov r30, r24
37; CHECK-NEXT: mov r31, r25
38; CHECK-NEXT: std Z+1, r19
39; CHECK-NEXT: st Z, r18
40
41bb0:
42  %2 = getelementptr i8, ptr %1, i8 61
43  store i32 1234, ptr %2
44  ret void
45}
46
47define void @check62(ptr %1) {
48; CHECK-LABEL: check62:
49; CHECK-NEXT: %bb.0
50; CHECK-NEXT: ldi r18, 210
51; CHECK-NEXT: ldi r19, 4
52; CHECK-NEXT: mov r30, r24
53; CHECK-NEXT: mov r31, r25
54; CHECK-NEXT: std Z+63, r19
55; CHECK-NEXT: std Z+62, r18
56; CHECK-NEXT: adiw r24, 62
57; CHECK-NEXT: ldi r18, 0
58; CHECK-NEXT: ldi r19, 0
59; CHECK-NEXT: mov r30, r24
60; CHECK-NEXT: mov r31, r25
61; CHECK-NEXT: std Z+3, r19
62; CHECK-NEXT: std Z+2, r18
63; CHECK-NEXT: ret
64
65bb0:
66  %2 = getelementptr i8, ptr %1, i8 62
67  store i32 1234, ptr %2
68  ret void
69}
70
71define void @check63(ptr %1) {
72; CHECK-LABEL: check63:
73; CHECK-NEXT: %bb.0
74; CHECK-NEXT: adiw r24, 63
75; CHECK-NEXT: ldi r18, 0
76; CHECK-NEXT: ldi r19, 0
77; CHECK-NEXT: mov r30, r24
78; CHECK-NEXT: mov r31, r25
79; CHECK-NEXT: std Z+3, r19
80; CHECK-NEXT: std Z+2, r18
81; CHECK-NEXT: ldi r24, 210
82; CHECK-NEXT: ldi r25, 4
83; CHECK-NEXT: std Z+1, r25
84; CHECK-NEXT: st Z, r24
85; CHECK-NEXT: ret
86
87bb0:
88  %2 = getelementptr i8, ptr %1, i8 63
89  store i32 1234, ptr %2
90  ret void
91}
92
93define void @check64(ptr %1) {
94; CHECK-LABEL: check64:
95; CHECK-NEXT: %bb.0
96; CHECK-NEXT: subi r24, 192
97; CHECK-NEXT: sbci r25, 255
98; CHECK-NEXT: ldi r18, 0
99; CHECK-NEXT: ldi r19, 0
100; CHECK-NEXT: mov r30, r24
101; CHECK-NEXT: mov r31, r25
102; CHECK-NEXT: std Z+3, r19
103; CHECK-NEXT: std Z+2, r18
104; CHECK-NEXT: ldi r24, 210
105; CHECK-NEXT: ldi r25, 4
106; CHECK-NEXT: std Z+1, r25
107; CHECK-NEXT: st Z, r24
108; CHECK-NEXT: ret
109
110bb0:
111  %2 = getelementptr i8, ptr %1, i8 64
112  store i32 1234, ptr %2
113  ret void
114}
115
116define void @check65(ptr %1) {
117; CHECK-LABEL: check65:
118; CHECK-NEXT: %bb.0
119; CHECK-NEXT: subi r24, 191
120; CHECK-NEXT: sbci r25, 255
121; CHECK-NEXT: ldi r18, 0
122; CHECK-NEXT: ldi r19, 0
123; CHECK-NEXT: mov r30, r24
124; CHECK-NEXT: mov r31, r25
125; CHECK-NEXT: std Z+3, r19
126; CHECK-NEXT: std Z+2, r18
127; CHECK-NEXT: ldi r24, 210
128; CHECK-NEXT: ldi r25, 4
129; CHECK-NEXT: std Z+1, r25
130; CHECK-NEXT: st Z, r24
131; CHECK-NEXT: ret
132
133bb0:
134  %2 = getelementptr i8, ptr %1, i8 65
135  store i32 1234, ptr %2
136  ret void
137}
138