[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / Hexagon / isel / extload-i1.ll
blobdef04ee4026c19733b8a62cd1756c747ccbe23f1
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(i1* %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, i1* %a0, i32 1
21   %v1 = load i1, i1* %v0
22   %v2 = sext i1 %v1 to i32
23   ret i32 %v2
26 define i32 @f1(i1* %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, i1* %a0, i32 %a1
37   %v1 = load i1, i1* %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], [128 x i8]* @array8, i32 0, i32 %a0
53   %v1 = bitcast i8* %v0 to i1*
54   %v2 = load i1, i1* %v1
55   %v3 = sext i1 %v2 to i32
56   ret i32 %v3
59 define i32 @f3(i32 %a0) #0 {
60 ; CHECK-LABEL: f3:
61 ; CHECK:       // %bb.0:
62 ; CHECK-NEXT:    {
63 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
64 ; CHECK-NEXT:    }
65 ; CHECK-NEXT:    {
66 ; CHECK-NEXT:     r0 = sub(#0,r0)
67 ; CHECK-NEXT:     jumpr r31
68 ; CHECK-NEXT:    }
69   %v0 = getelementptr [128 x i32], [128 x i32]* @array32, i32 0, i32 %a0
70   %v1 = bitcast i32* %v0 to i1*
71   %v2 = load i1, i1* %v1
72   %v3 = sext i1 %v2 to i32
73   ret i32 %v3
76 define i32 @f4() #0 {
77 ; CHECK-LABEL: f4:
78 ; CHECK:       // %bb.0:
79 ; CHECK-NEXT:    {
80 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
81 ; CHECK-NEXT:    }
82 ; CHECK-NEXT:    {
83 ; CHECK-NEXT:     r0 = sub(#0,r0)
84 ; CHECK-NEXT:     jumpr r31
85 ; CHECK-NEXT:    }
86   %v0 = load i1, i1* @global_gp
87   %v1 = sext i1 %v0 to i32
88   ret i32 %v1
91 define i32 @f5(i64 %a0, i64 %a1, i64 %a2, i1 signext %a3) #0 {
92 ; CHECK-LABEL: f5:
93 ; CHECK:       // %bb.0:
94 ; CHECK-NEXT:    {
95 ; CHECK-NEXT:     r0 = memub(r29+#0)
96 ; CHECK-NEXT:    }
97 ; CHECK-NEXT:    {
98 ; CHECK-NEXT:     r0 = sub(#0,r0)
99 ; CHECK-NEXT:     jumpr r31
100 ; CHECK-NEXT:    }
101   %v0 = sext i1 %a3 to i32
102   ret i32 %v0
105 define i64 @f6(i1* %a0) #0 {
106 ; CHECK-LABEL: f6:
107 ; CHECK:       // %bb.0:
108 ; CHECK-NEXT:    {
109 ; CHECK-NEXT:     r0 = memub(r0+#1)
110 ; CHECK-NEXT:    }
111 ; CHECK-NEXT:    {
112 ; CHECK-NEXT:     r0 = sub(#0,r0)
113 ; CHECK-NEXT:    }
114 ; CHECK-NEXT:    {
115 ; CHECK-NEXT:     r1 = asr(r0,#31)
116 ; CHECK-NEXT:     jumpr r31
117 ; CHECK-NEXT:    }
118   %v0 = getelementptr i1, i1* %a0, i32 1
119   %v1 = load i1, i1* %v0
120   %v2 = sext i1 %v1 to i64
121   ret i64 %v2
124 define i64 @f7(i1* %a0, i32 %a1) #0 {
125 ; CHECK-LABEL: f7:
126 ; CHECK:       // %bb.0:
127 ; CHECK-NEXT:    {
128 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
129 ; CHECK-NEXT:    }
130 ; CHECK-NEXT:    {
131 ; CHECK-NEXT:     r0 = sub(#0,r0)
132 ; CHECK-NEXT:    }
133 ; CHECK-NEXT:    {
134 ; CHECK-NEXT:     r1 = asr(r0,#31)
135 ; CHECK-NEXT:     jumpr r31
136 ; CHECK-NEXT:    }
137   %v0 = getelementptr i1, i1* %a0, i32 %a1
138   %v1 = load i1, i1* %v0
139   %v2 = sext i1 %v1 to i64
140   ret i64 %v2
143 define i64 @f8(i32 %a0) #0 {
144 ; CHECK-LABEL: f8:
145 ; CHECK:       // %bb.0:
146 ; CHECK-NEXT:    {
147 ; CHECK-NEXT:     r0 = memub(r0+##array8)
148 ; CHECK-NEXT:    }
149 ; CHECK-NEXT:    {
150 ; CHECK-NEXT:     r0 = sub(#0,r0)
151 ; CHECK-NEXT:    }
152 ; CHECK-NEXT:    {
153 ; CHECK-NEXT:     r1 = asr(r0,#31)
154 ; CHECK-NEXT:     jumpr r31
155 ; CHECK-NEXT:    }
156   %v0 = getelementptr [128 x i8], [128 x i8]* @array8, i32 0, i32 %a0
157   %v1 = bitcast i8* %v0 to i1*
158   %v2 = load i1, i1* %v1
159   %v3 = sext i1 %v2 to i64
160   ret i64 %v3
163 define i64 @f9(i32 %a0) #0 {
164 ; CHECK-LABEL: f9:
165 ; CHECK:       // %bb.0:
166 ; CHECK-NEXT:    {
167 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
168 ; CHECK-NEXT:    }
169 ; CHECK-NEXT:    {
170 ; CHECK-NEXT:     r0 = sub(#0,r0)
171 ; CHECK-NEXT:    }
172 ; CHECK-NEXT:    {
173 ; CHECK-NEXT:     r1 = asr(r0,#31)
174 ; CHECK-NEXT:     jumpr r31
175 ; CHECK-NEXT:    }
176   %v0 = getelementptr [128 x i32], [128 x i32]* @array32, i32 0, i32 %a0
177   %v1 = bitcast i32* %v0 to i1*
178   %v2 = load i1, i1* %v1
179   %v3 = sext i1 %v2 to i64
180   ret i64 %v3
183 define i64 @f10() #0 {
184 ; CHECK-LABEL: f10:
185 ; CHECK:       // %bb.0:
186 ; CHECK-NEXT:    {
187 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
188 ; CHECK-NEXT:    }
189 ; CHECK-NEXT:    {
190 ; CHECK-NEXT:     r0 = sub(#0,r0)
191 ; CHECK-NEXT:    }
192 ; CHECK-NEXT:    {
193 ; CHECK-NEXT:     r1 = asr(r0,#31)
194 ; CHECK-NEXT:     jumpr r31
195 ; CHECK-NEXT:    }
196   %v0 = load i1, i1* @global_gp
197   %v1 = sext i1 %v0 to i64
198   ret i64 %v1
201 define i64 @f11(i64 %a0, i64 %a1, i64 %a2, i1 signext %a3) #0 {
202 ; CHECK-LABEL: f11:
203 ; CHECK:       // %bb.0:
204 ; CHECK-NEXT:    {
205 ; CHECK-NEXT:     r0 = memub(r29+#0)
206 ; CHECK-NEXT:    }
207 ; CHECK-NEXT:    {
208 ; CHECK-NEXT:     r0 = sub(#0,r0)
209 ; CHECK-NEXT:    }
210 ; CHECK-NEXT:    {
211 ; CHECK-NEXT:     r1 = asr(r0,#31)
212 ; CHECK-NEXT:     jumpr r31
213 ; CHECK-NEXT:    }
214   %v0 = sext i1 %a3 to i64
215   ret i64 %v0
218 ; Zero-extensions
220 define i32 @f12(i1* %a0) #0 {
221 ; CHECK-LABEL: f12:
222 ; CHECK:       // %bb.0:
223 ; CHECK-NEXT:    {
224 ; CHECK-NEXT:     r0 = memub(r0+#1)
225 ; CHECK-NEXT:     jumpr r31
226 ; CHECK-NEXT:    }
227   %v0 = getelementptr i1, i1* %a0, i32 1
228   %v1 = load i1, i1* %v0
229   %v2 = zext i1 %v1 to i32
230   ret i32 %v2
233 define i32 @f13(i1* %a0, i32 %a1) #0 {
234 ; CHECK-LABEL: f13:
235 ; CHECK:       // %bb.0:
236 ; CHECK-NEXT:    {
237 ; CHECK-NEXT:     jumpr r31
238 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
239 ; CHECK-NEXT:    }
240   %v0 = getelementptr i1, i1* %a0, i32 %a1
241   %v1 = load i1, i1* %v0
242   %v2 = zext i1 %v1 to i32
243   ret i32 %v2
246 define i32 @f14(i32 %a0) #0 {
247 ; CHECK-LABEL: f14:
248 ; CHECK:       // %bb.0:
249 ; CHECK-NEXT:    {
250 ; CHECK-NEXT:     jumpr r31
251 ; CHECK-NEXT:     r0 = memub(r0+##array8)
252 ; CHECK-NEXT:    }
253   %v0 = getelementptr [128 x i8], [128 x i8]* @array8, i32 0, i32 %a0
254   %v1 = bitcast i8* %v0 to i1*
255   %v2 = load i1, i1* %v1
256   %v3 = zext i1 %v2 to i32
257   ret i32 %v3
260 define i32 @f15(i32 %a0) #0 {
261 ; CHECK-LABEL: f15:
262 ; CHECK:       // %bb.0:
263 ; CHECK-NEXT:    {
264 ; CHECK-NEXT:     jumpr r31
265 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
266 ; CHECK-NEXT:    }
267   %v0 = getelementptr [128 x i32], [128 x i32]* @array32, i32 0, i32 %a0
268   %v1 = bitcast i32* %v0 to i1*
269   %v2 = load i1, i1* %v1
270   %v3 = zext i1 %v2 to i32
271   ret i32 %v3
274 define i32 @f16() #0 {
275 ; CHECK-LABEL: f16:
276 ; CHECK:       // %bb.0:
277 ; CHECK-NEXT:    {
278 ; CHECK-NEXT:     jumpr r31
279 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
280 ; CHECK-NEXT:    }
281   %v0 = load i1, i1* @global_gp
282   %v1 = zext i1 %v0 to i32
283   ret i32 %v1
286 define i32 @f17(i64 %a0, i64 %a1, i64 %a2, i1 zeroext %a3) #0 {
287 ; CHECK-LABEL: f17:
288 ; CHECK:       // %bb.0:
289 ; CHECK-NEXT:    {
290 ; CHECK-NEXT:     jumpr r31
291 ; CHECK-NEXT:     r0 = memub(r29+#0)
292 ; CHECK-NEXT:    }
293   %v0 = zext i1 %a3 to i32
294   ret i32 %v0
297 define i64 @f18(i1* %a0) #0 {
298 ; CHECK-LABEL: f18:
299 ; CHECK:       // %bb.0:
300 ; CHECK-NEXT:    {
301 ; CHECK-NEXT:     jumpr r31
302 ; CHECK-NEXT:     r1 = #0
303 ; CHECK-NEXT:     r0 = memub(r0+#1)
304 ; CHECK-NEXT:    }
305   %v0 = getelementptr i1, i1* %a0, i32 1
306   %v1 = load i1, i1* %v0
307   %v2 = zext i1 %v1 to i64
308   ret i64 %v2
311 define i64 @f19(i1* %a0, i32 %a1) #0 {
312 ; CHECK-LABEL: f19:
313 ; CHECK:       // %bb.0:
314 ; CHECK-NEXT:    {
315 ; CHECK-NEXT:     r1 = #0
316 ; CHECK-NEXT:     jumpr r31
317 ; CHECK-NEXT:     r0 = memub(r0+r1<<#0)
318 ; CHECK-NEXT:    }
319   %v0 = getelementptr i1, i1* %a0, i32 %a1
320   %v1 = load i1, i1* %v0
321   %v2 = zext i1 %v1 to i64
322   ret i64 %v2
325 define i64 @f20(i32 %a0) #0 {
326 ; CHECK-LABEL: f20:
327 ; CHECK:       // %bb.0:
328 ; CHECK-NEXT:    {
329 ; CHECK-NEXT:     r1 = #0
330 ; CHECK-NEXT:     jumpr r31
331 ; CHECK-NEXT:     r0 = memub(r0+##array8)
332 ; CHECK-NEXT:    }
333   %v0 = getelementptr [128 x i8], [128 x i8]* @array8, i32 0, i32 %a0
334   %v1 = bitcast i8* %v0 to i1*
335   %v2 = load i1, i1* %v1
336   %v3 = zext i1 %v2 to i64
337   ret i64 %v3
340 define i64 @f21(i32 %a0) #0 {
341 ; CHECK-LABEL: f21:
342 ; CHECK:       // %bb.0:
343 ; CHECK-NEXT:    {
344 ; CHECK-NEXT:     r1 = #0
345 ; CHECK-NEXT:     jumpr r31
346 ; CHECK-NEXT:     r0 = memub(r0<<#2+##array32)
347 ; CHECK-NEXT:    }
348   %v0 = getelementptr [128 x i32], [128 x i32]* @array32, i32 0, i32 %a0
349   %v1 = bitcast i32* %v0 to i1*
350   %v2 = load i1, i1* %v1
351   %v3 = zext i1 %v2 to i64
352   ret i64 %v3
355 define i64 @f22() #0 {
356 ; CHECK-LABEL: f22:
357 ; CHECK:       // %bb.0:
358 ; CHECK-NEXT:    {
359 ; CHECK-NEXT:     r1 = #0
360 ; CHECK-NEXT:     jumpr r31
361 ; CHECK-NEXT:     r0 = memub(gp+#global_gp)
362 ; CHECK-NEXT:    }
363   %v0 = load i1, i1* @global_gp
364   %v1 = zext i1 %v0 to i64
365   ret i64 %v1
368 define i64 @f23(i64 %a0, i64 %a1, i64 %a2, i1 signext %a3) #0 {
369 ; CHECK-LABEL: f23:
370 ; CHECK:       // %bb.0:
371 ; CHECK-NEXT:    {
372 ; CHECK-NEXT:     r1 = #0
373 ; CHECK-NEXT:     jumpr r31
374 ; CHECK-NEXT:     r0 = memub(r29+#0)
375 ; CHECK-NEXT:    }
376   %v0 = zext i1 %a3 to i64
377   ret i64 %v0
380 attributes #0 = { nounwind "target-cpu"="hexagonv66" }