Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Hexagon / isel / extload-i1.ll
blobcfaf6fb0b57e5bdf9f5aaf7be472b6b43dc241e5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=hexagon  < %s | FileCheck %s
4 @array8 = global [128 x i8] zeroinitializer
5 @array32 = global [128 x i32] zeroinitializer
6 @global_gp = global i1 false
8 ; Sign extensions
10 define i32 @f0(ptr %a0) #0 {
11 ; CHECK-LABEL: f0:
12 ; CHECK:       // %bb.0:
13 ; CHECK-NEXT:    {
14 ; CHECK-NEXT:     r0 = memub(r0+#1)
15 ; CHECK-NEXT:    }
16 ; CHECK-NEXT:    {
17 ; CHECK-NEXT:     r0 = sub(#0,r0)
18 ; CHECK-NEXT:     jumpr r31
19 ; CHECK-NEXT:    }
20   %v0 = getelementptr i1, ptr %a0, i32 1
21   %v1 = load i1, ptr %v0
22   %v2 = sext i1 %v1 to i32
23   ret i32 %v2
26 define i32 @f1(ptr %a0, i32 %a1) #0 {
27 ; CHECK-LABEL: f1:
28 ; CHECK:       // %bb.0:
29 ; CHECK-NEXT:    {
30 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
31 ; CHECK-NEXT:    }
32 ; CHECK-NEXT:    {
33 ; CHECK-NEXT:     r0 = sub(#0,r0)
34 ; CHECK-NEXT:     jumpr r31
35 ; CHECK-NEXT:    }
36   %v0 = getelementptr i1, ptr %a0, i32 %a1
37   %v1 = load i1, ptr %v0
38   %v2 = sext i1 %v1 to i32
39   ret i32 %v2
42 define i32 @f2(i32 %a0) #0 {
43 ; CHECK-LABEL: f2:
44 ; CHECK:       // %bb.0:
45 ; CHECK-NEXT:    {
46 ; CHECK-NEXT:     r0 = memub(r0+##array8)
47 ; CHECK-NEXT:    }
48 ; CHECK-NEXT:    {
49 ; CHECK-NEXT:     r0 = sub(#0,r0)
50 ; CHECK-NEXT:     jumpr r31
51 ; CHECK-NEXT:    }
52   %v0 = getelementptr [128 x i8], ptr @array8, i32 0, i32 %a0
53   %v2 = load i1, ptr %v0
54   %v3 = sext i1 %v2 to i32
55   ret i32 %v3
58 define i32 @f3(i32 %a0) #0 {
59 ; CHECK-LABEL: f3:
60 ; CHECK:       // %bb.0:
61 ; CHECK-NEXT:    {
62 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
63 ; CHECK-NEXT:    }
64 ; CHECK-NEXT:    {
65 ; CHECK-NEXT:     r0 = sub(#0,r0)
66 ; CHECK-NEXT:     jumpr r31
67 ; CHECK-NEXT:    }
68   %v0 = getelementptr [128 x i32], ptr @array32, i32 0, i32 %a0
69   %v2 = load i1, ptr %v0
70   %v3 = sext i1 %v2 to i32
71   ret i32 %v3
74 define i32 @f4() #0 {
75 ; CHECK-LABEL: f4:
76 ; CHECK:       // %bb.0:
77 ; CHECK-NEXT:    {
78 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
79 ; CHECK-NEXT:    }
80 ; CHECK-NEXT:    {
81 ; CHECK-NEXT:     r0 = sub(#0,r0)
82 ; CHECK-NEXT:     jumpr r31
83 ; CHECK-NEXT:    }
84   %v0 = load i1, ptr @global_gp
85   %v1 = sext i1 %v0 to i32
86   ret i32 %v1
89 define i32 @f5(i64 %a0, i64 %a1, i64 %a2, i1 signext %a3) #0 {
90 ; CHECK-LABEL: f5:
91 ; CHECK:       // %bb.0:
92 ; CHECK-NEXT:    {
93 ; CHECK-NEXT:     r0 = memub(r29+#0)
94 ; CHECK-NEXT:    }
95 ; CHECK-NEXT:    {
96 ; CHECK-NEXT:     r0 = sub(#0,r0)
97 ; CHECK-NEXT:     jumpr r31
98 ; CHECK-NEXT:    }
99   %v0 = sext i1 %a3 to i32
100   ret i32 %v0
103 define i64 @f6(ptr %a0) #0 {
104 ; CHECK-LABEL: f6:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    {
107 ; CHECK-NEXT:     r0 = memub(r0+#1)
108 ; CHECK-NEXT:    }
109 ; CHECK-NEXT:    {
110 ; CHECK-NEXT:     r0 = sub(#0,r0)
111 ; CHECK-NEXT:    }
112 ; CHECK-NEXT:    {
113 ; CHECK-NEXT:     r1 = asr(r0,#31)
114 ; CHECK-NEXT:     jumpr r31
115 ; CHECK-NEXT:    }
116   %v0 = getelementptr i1, ptr %a0, i32 1
117   %v1 = load i1, ptr %v0
118   %v2 = sext i1 %v1 to i64
119   ret i64 %v2
122 define i64 @f7(ptr %a0, i32 %a1) #0 {
123 ; CHECK-LABEL: f7:
124 ; CHECK:       // %bb.0:
125 ; CHECK-NEXT:    {
126 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
127 ; CHECK-NEXT:    }
128 ; CHECK-NEXT:    {
129 ; CHECK-NEXT:     r0 = sub(#0,r0)
130 ; CHECK-NEXT:    }
131 ; CHECK-NEXT:    {
132 ; CHECK-NEXT:     r1 = asr(r0,#31)
133 ; CHECK-NEXT:     jumpr r31
134 ; CHECK-NEXT:    }
135   %v0 = getelementptr i1, ptr %a0, i32 %a1
136   %v1 = load i1, ptr %v0
137   %v2 = sext i1 %v1 to i64
138   ret i64 %v2
141 define i64 @f8(i32 %a0) #0 {
142 ; CHECK-LABEL: f8:
143 ; CHECK:       // %bb.0:
144 ; CHECK-NEXT:    {
145 ; CHECK-NEXT:     r0 = memub(r0+##array8)
146 ; CHECK-NEXT:    }
147 ; CHECK-NEXT:    {
148 ; CHECK-NEXT:     r0 = sub(#0,r0)
149 ; CHECK-NEXT:    }
150 ; CHECK-NEXT:    {
151 ; CHECK-NEXT:     r1 = asr(r0,#31)
152 ; CHECK-NEXT:     jumpr r31
153 ; CHECK-NEXT:    }
154   %v0 = getelementptr [128 x i8], ptr @array8, i32 0, i32 %a0
155   %v2 = load i1, ptr %v0
156   %v3 = sext i1 %v2 to i64
157   ret i64 %v3
160 define i64 @f9(i32 %a0) #0 {
161 ; CHECK-LABEL: f9:
162 ; CHECK:       // %bb.0:
163 ; CHECK-NEXT:    {
164 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
165 ; CHECK-NEXT:    }
166 ; CHECK-NEXT:    {
167 ; CHECK-NEXT:     r0 = sub(#0,r0)
168 ; CHECK-NEXT:    }
169 ; CHECK-NEXT:    {
170 ; CHECK-NEXT:     r1 = asr(r0,#31)
171 ; CHECK-NEXT:     jumpr r31
172 ; CHECK-NEXT:    }
173   %v0 = getelementptr [128 x i32], ptr @array32, i32 0, i32 %a0
174   %v2 = load i1, ptr %v0
175   %v3 = sext i1 %v2 to i64
176   ret i64 %v3
179 define i64 @f10() #0 {
180 ; CHECK-LABEL: f10:
181 ; CHECK:       // %bb.0:
182 ; CHECK-NEXT:    {
183 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
184 ; CHECK-NEXT:    }
185 ; CHECK-NEXT:    {
186 ; CHECK-NEXT:     r0 = sub(#0,r0)
187 ; CHECK-NEXT:    }
188 ; CHECK-NEXT:    {
189 ; CHECK-NEXT:     r1 = asr(r0,#31)
190 ; CHECK-NEXT:     jumpr r31
191 ; CHECK-NEXT:    }
192   %v0 = load i1, ptr @global_gp
193   %v1 = sext i1 %v0 to i64
194   ret i64 %v1
197 define i64 @f11(i64 %a0, i64 %a1, i64 %a2, i1 signext %a3) #0 {
198 ; CHECK-LABEL: f11:
199 ; CHECK:       // %bb.0:
200 ; CHECK-NEXT:    {
201 ; CHECK-NEXT:     r0 = memub(r29+#0)
202 ; CHECK-NEXT:    }
203 ; CHECK-NEXT:    {
204 ; CHECK-NEXT:     r0 = sub(#0,r0)
205 ; CHECK-NEXT:    }
206 ; CHECK-NEXT:    {
207 ; CHECK-NEXT:     r1 = asr(r0,#31)
208 ; CHECK-NEXT:     jumpr r31
209 ; CHECK-NEXT:    }
210   %v0 = sext i1 %a3 to i64
211   ret i64 %v0
214 ; Zero-extensions
216 define i32 @f12(ptr %a0) #0 {
217 ; CHECK-LABEL: f12:
218 ; CHECK:       // %bb.0:
219 ; CHECK-NEXT:    {
220 ; CHECK-NEXT:     r0 = memub(r0+#1)
221 ; CHECK-NEXT:     jumpr r31
222 ; CHECK-NEXT:    }
223   %v0 = getelementptr i1, ptr %a0, i32 1
224   %v1 = load i1, ptr %v0
225   %v2 = zext i1 %v1 to i32
226   ret i32 %v2
229 define i32 @f13(ptr %a0, i32 %a1) #0 {
230 ; CHECK-LABEL: f13:
231 ; CHECK:       // %bb.0:
232 ; CHECK-NEXT:    {
233 ; CHECK-NEXT:     jumpr r31
234 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
235 ; CHECK-NEXT:    }
236   %v0 = getelementptr i1, ptr %a0, i32 %a1
237   %v1 = load i1, ptr %v0
238   %v2 = zext i1 %v1 to i32
239   ret i32 %v2
242 define i32 @f14(i32 %a0) #0 {
243 ; CHECK-LABEL: f14:
244 ; CHECK:       // %bb.0:
245 ; CHECK-NEXT:    {
246 ; CHECK-NEXT:     jumpr r31
247 ; CHECK-NEXT:     r0 = memub(r0+##array8)
248 ; CHECK-NEXT:    }
249   %v0 = getelementptr [128 x i8], ptr @array8, i32 0, i32 %a0
250   %v2 = load i1, ptr %v0
251   %v3 = zext i1 %v2 to i32
252   ret i32 %v3
255 define i32 @f15(i32 %a0) #0 {
256 ; CHECK-LABEL: f15:
257 ; CHECK:       // %bb.0:
258 ; CHECK-NEXT:    {
259 ; CHECK-NEXT:     jumpr r31
260 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
261 ; CHECK-NEXT:    }
262   %v0 = getelementptr [128 x i32], ptr @array32, i32 0, i32 %a0
263   %v2 = load i1, ptr %v0
264   %v3 = zext i1 %v2 to i32
265   ret i32 %v3
268 define i32 @f16() #0 {
269 ; CHECK-LABEL: f16:
270 ; CHECK:       // %bb.0:
271 ; CHECK-NEXT:    {
272 ; CHECK-NEXT:     jumpr r31
273 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
274 ; CHECK-NEXT:    }
275   %v0 = load i1, ptr @global_gp
276   %v1 = zext i1 %v0 to i32
277   ret i32 %v1
280 define i32 @f17(i64 %a0, i64 %a1, i64 %a2, i1 zeroext %a3) #0 {
281 ; CHECK-LABEL: f17:
282 ; CHECK:       // %bb.0:
283 ; CHECK-NEXT:    {
284 ; CHECK-NEXT:     jumpr r31
285 ; CHECK-NEXT:     r0 = memub(r29+#0)
286 ; CHECK-NEXT:    }
287   %v0 = zext i1 %a3 to i32
288   ret i32 %v0
291 define i64 @f18(ptr %a0) #0 {
292 ; CHECK-LABEL: f18:
293 ; CHECK:       // %bb.0:
294 ; CHECK-NEXT:    {
295 ; CHECK-NEXT:     jumpr r31
296 ; CHECK-NEXT:     r1 = #0
297 ; CHECK-NEXT:     r0 = memub(r0+#1)
298 ; CHECK-NEXT:    }
299   %v0 = getelementptr i1, ptr %a0, i32 1
300   %v1 = load i1, ptr %v0
301   %v2 = zext i1 %v1 to i64
302   ret i64 %v2
305 define i64 @f19(ptr %a0, i32 %a1) #0 {
306 ; CHECK-LABEL: f19:
307 ; CHECK:       // %bb.0:
308 ; CHECK-NEXT:    {
309 ; CHECK-NEXT:     r1 = #0
310 ; CHECK-NEXT:     jumpr r31
311 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
312 ; CHECK-NEXT:    }
313   %v0 = getelementptr i1, ptr %a0, i32 %a1
314   %v1 = load i1, ptr %v0
315   %v2 = zext i1 %v1 to i64
316   ret i64 %v2
319 define i64 @f20(i32 %a0) #0 {
320 ; CHECK-LABEL: f20:
321 ; CHECK:       // %bb.0:
322 ; CHECK-NEXT:    {
323 ; CHECK-NEXT:     r1 = #0
324 ; CHECK-NEXT:     jumpr r31
325 ; CHECK-NEXT:     r0 = memub(r0+##array8)
326 ; CHECK-NEXT:    }
327   %v0 = getelementptr [128 x i8], ptr @array8, i32 0, i32 %a0
328   %v2 = load i1, ptr %v0
329   %v3 = zext i1 %v2 to i64
330   ret i64 %v3
333 define i64 @f21(i32 %a0) #0 {
334 ; CHECK-LABEL: f21:
335 ; CHECK:       // %bb.0:
336 ; CHECK-NEXT:    {
337 ; CHECK-NEXT:     r1 = #0
338 ; CHECK-NEXT:     jumpr r31
339 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
340 ; CHECK-NEXT:    }
341   %v0 = getelementptr [128 x i32], ptr @array32, i32 0, i32 %a0
342   %v2 = load i1, ptr %v0
343   %v3 = zext i1 %v2 to i64
344   ret i64 %v3
347 define i64 @f22() #0 {
348 ; CHECK-LABEL: f22:
349 ; CHECK:       // %bb.0:
350 ; CHECK-NEXT:    {
351 ; CHECK-NEXT:     r1 = #0
352 ; CHECK-NEXT:     jumpr r31
353 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
354 ; CHECK-NEXT:    }
355   %v0 = load i1, ptr @global_gp
356   %v1 = zext i1 %v0 to i64
357   ret i64 %v1
360 define i64 @f23(i64 %a0, i64 %a1, i64 %a2, i1 signext %a3) #0 {
361 ; CHECK-LABEL: f23:
362 ; CHECK:       // %bb.0:
363 ; CHECK-NEXT:    {
364 ; CHECK-NEXT:     r1 = #0
365 ; CHECK-NEXT:     jumpr r31
366 ; CHECK-NEXT:     r0 = memub(r29+#0)
367 ; CHECK-NEXT:    }
368   %v0 = zext i1 %a3 to i64
369   ret i64 %v0
372 attributes #0 = { nounwind "target-cpu"="hexagonv66" }