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