Revert "[asan] Enable wait4 test on Android" (#125011)
[llvm-project.git] / llvm / test / CodeGen / Hexagon / autohvx / shift-64b.ll
blob81a87a549fb5310e0a204dc2f4197fc61af6931e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=hexagon < %s | FileCheck %s
4 define <64 x i8> @test0000(<64 x i8> %a0, i8 %a1) #0 {
5 ; CHECK-LABEL: test0000:
6 ; CHECK:       // %bb.0:
7 ; CHECK-NEXT:    {
8 ; CHECK-NEXT:     v1:0.uh = vzxt(v0.ub)
9 ; CHECK-NEXT:    }
10 ; CHECK-NEXT:    {
11 ; CHECK-NEXT:     v0.h = vasl(v0.h,r0)
12 ; CHECK-NEXT:    }
13 ; CHECK-NEXT:    {
14 ; CHECK-NEXT:     v1.h = vasl(v1.h,r0)
15 ; CHECK-NEXT:    }
16 ; CHECK-NEXT:    {
17 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
18 ; CHECK-NEXT:     jumpr r31
19 ; CHECK-NEXT:    }
20   %b0 = insertelement <64 x i8> zeroinitializer, i8 %a1, i32 0
21   %b1 = shufflevector <64 x i8> %b0, <64 x i8> undef, <64 x i32> zeroinitializer
22   %v0 = shl <64 x i8> %a0, %b1
23   ret <64 x i8> %v0
26 define <64 x i8> @test0001(<64 x i8> %a0, i8 %a1) #0 {
27 ; CHECK-LABEL: test0001:
28 ; CHECK:       // %bb.0:
29 ; CHECK-NEXT:    {
30 ; CHECK-NEXT:     v1:0.h = vsxt(v0.b)
31 ; CHECK-NEXT:    }
32 ; CHECK-NEXT:    {
33 ; CHECK-NEXT:     v0.h = vasr(v0.h,r0)
34 ; CHECK-NEXT:    }
35 ; CHECK-NEXT:    {
36 ; CHECK-NEXT:     v1.h = vasr(v1.h,r0)
37 ; CHECK-NEXT:    }
38 ; CHECK-NEXT:    {
39 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
40 ; CHECK-NEXT:     jumpr r31
41 ; CHECK-NEXT:    }
42   %b0 = insertelement <64 x i8> zeroinitializer, i8 %a1, i32 0
43   %b1 = shufflevector <64 x i8> %b0, <64 x i8> undef, <64 x i32> zeroinitializer
44   %v0 = ashr <64 x i8> %a0, %b1
45   ret <64 x i8> %v0
48 define <64 x i8> @test0002(<64 x i8> %a0, i8 %a1) #0 {
49 ; CHECK-LABEL: test0002:
50 ; CHECK:       // %bb.0:
51 ; CHECK-NEXT:    {
52 ; CHECK-NEXT:     v1:0.uh = vzxt(v0.ub)
53 ; CHECK-NEXT:    }
54 ; CHECK-NEXT:    {
55 ; CHECK-NEXT:     v0.uh = vlsr(v0.uh,r0)
56 ; CHECK-NEXT:    }
57 ; CHECK-NEXT:    {
58 ; CHECK-NEXT:     v1.uh = vlsr(v1.uh,r0)
59 ; CHECK-NEXT:    }
60 ; CHECK-NEXT:    {
61 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
62 ; CHECK-NEXT:     jumpr r31
63 ; CHECK-NEXT:    }
64   %b0 = insertelement <64 x i8> zeroinitializer, i8 %a1, i32 0
65   %b1 = shufflevector <64 x i8> %b0, <64 x i8> undef, <64 x i32> zeroinitializer
66   %v0 = lshr <64 x i8> %a0, %b1
67   ret <64 x i8> %v0
70 define <32 x i16> @test0010(<32 x i16> %a0, i16 %a1) #0 {
71 ; CHECK-LABEL: test0010:
72 ; CHECK:       // %bb.0:
73 ; CHECK-NEXT:    {
74 ; CHECK-NEXT:     v0.h = vasl(v0.h,r0)
75 ; CHECK-NEXT:     jumpr r31
76 ; CHECK-NEXT:    }
77   %b0 = insertelement <32 x i16> zeroinitializer, i16 %a1, i32 0
78   %b1 = shufflevector <32 x i16> %b0, <32 x i16> undef, <32 x i32> zeroinitializer
80   %v0 = shl <32 x i16> %a0, %b1
81   ret <32 x i16> %v0
84 define <32 x i16> @test0011(<32 x i16> %a0, i16 %a1) #0 {
85 ; CHECK-LABEL: test0011:
86 ; CHECK:       // %bb.0:
87 ; CHECK-NEXT:    {
88 ; CHECK-NEXT:     v0.h = vasr(v0.h,r0)
89 ; CHECK-NEXT:     jumpr r31
90 ; CHECK-NEXT:    }
91   %b0 = insertelement <32 x i16> zeroinitializer, i16 %a1, i32 0
92   %b1 = shufflevector <32 x i16> %b0, <32 x i16> undef, <32 x i32> zeroinitializer
93   %v0 = ashr <32 x i16> %a0, %b1
94   ret <32 x i16> %v0
97 define <32 x i16> @test0012(<32 x i16> %a0, i16 %a1) #0 {
98 ; CHECK-LABEL: test0012:
99 ; CHECK:       // %bb.0:
100 ; CHECK-NEXT:    {
101 ; CHECK-NEXT:     v0.uh = vlsr(v0.uh,r0)
102 ; CHECK-NEXT:     jumpr r31
103 ; CHECK-NEXT:    }
104   %b0 = insertelement <32 x i16> zeroinitializer, i16 %a1, i32 0
105   %b1 = shufflevector <32 x i16> %b0, <32 x i16> undef, <32 x i32> zeroinitializer
106   %v0 = lshr <32 x i16> %a0, %b1
107   ret <32 x i16> %v0
110 define <16 x i32> @test0020(<16 x i32> %a0, i32 %a1) #0 {
111 ; CHECK-LABEL: test0020:
112 ; CHECK:       // %bb.0:
113 ; CHECK-NEXT:    {
114 ; CHECK-NEXT:     v0.w = vasl(v0.w,r0)
115 ; CHECK-NEXT:     jumpr r31
116 ; CHECK-NEXT:    }
117   %b0 = insertelement <16 x i32> zeroinitializer, i32 %a1, i32 0
118   %b1 = shufflevector <16 x i32> %b0, <16 x i32> undef, <16 x i32> zeroinitializer
119   %v0 = shl <16 x i32> %a0, %b1
120   ret <16 x i32> %v0
123 define <16 x i32> @test0021(<16 x i32> %a0, i32 %a1) #0 {
124 ; CHECK-LABEL: test0021:
125 ; CHECK:       // %bb.0:
126 ; CHECK-NEXT:    {
127 ; CHECK-NEXT:     v0.w = vasr(v0.w,r0)
128 ; CHECK-NEXT:     jumpr r31
129 ; CHECK-NEXT:    }
130   %b0 = insertelement <16 x i32> zeroinitializer, i32 %a1, i32 0
131   %b1 = shufflevector <16 x i32> %b0, <16 x i32> undef, <16 x i32> zeroinitializer
132   %v0 = ashr <16 x i32> %a0, %b1
133   ret <16 x i32> %v0
136 define <16 x i32> @test0022(<16 x i32> %a0, i32 %a1) #0 {
137 ; CHECK-LABEL: test0022:
138 ; CHECK:       // %bb.0:
139 ; CHECK-NEXT:    {
140 ; CHECK-NEXT:     v0.uw = vlsr(v0.uw,r0)
141 ; CHECK-NEXT:     jumpr r31
142 ; CHECK-NEXT:    }
143   %b0 = insertelement <16 x i32> zeroinitializer, i32 %a1, i32 0
144   %b1 = shufflevector <16 x i32> %b0, <16 x i32> undef, <16 x i32> zeroinitializer
145   %v0 = lshr <16 x i32> %a0, %b1
146   ret <16 x i32> %v0
149 define <16 x i32> @test0023(<16 x i32> %a0, <16 x i32> %a1, i32 %a2) #0 {
150 ; CHECK-LABEL: test0023:
151 ; CHECK:       // %bb.0:
152 ; CHECK-NEXT:    {
153 ; CHECK-NEXT:     v0.w += vasl(v1.w,r0)
154 ; CHECK-NEXT:     jumpr r31
155 ; CHECK-NEXT:    }
156   %b0 = insertelement <16 x i32> zeroinitializer, i32 %a2, i32 0
157   %b1 = shufflevector <16 x i32> %b0, <16 x i32> undef, <16 x i32> zeroinitializer
158   %v0 = shl <16 x i32> %a1, %b1
159   %v1 = add <16 x i32> %a0, %v0
160   ret <16 x i32> %v1
163 define <16 x i32> @test0024(<16 x i32> %a0, <16 x i32> %a1, i32 %a2) #0 {
164 ; CHECK-LABEL: test0024:
165 ; CHECK:       // %bb.0:
166 ; CHECK-NEXT:    {
167 ; CHECK-NEXT:     v0.w += vasr(v1.w,r0)
168 ; CHECK-NEXT:     jumpr r31
169 ; CHECK-NEXT:    }
170   %b0 = insertelement <16 x i32> zeroinitializer, i32 %a2, i32 0
171   %b1 = shufflevector <16 x i32> %b0, <16 x i32> undef, <16 x i32> zeroinitializer
172   %v0 = ashr <16 x i32> %a1, %b1
173   %v1 = add <16 x i32> %a0, %v0
174   ret <16 x i32> %v1
177 define <64 x i8> @test0030(<64 x i8> %a0, <64 x i8> %a1) #0 {
178 ; CHECK-LABEL: test0030:
179 ; CHECK:       // %bb.0:
180 ; CHECK-NEXT:    {
181 ; CHECK-NEXT:     v3:2.uh = vzxt(v0.ub)
182 ; CHECK-NEXT:     v31:30.uh = vzxt(v1.ub)
183 ; CHECK-NEXT:    }
184 ; CHECK-NEXT:    {
185 ; CHECK-NEXT:     v0.h = vasl(v2.h,v30.h)
186 ; CHECK-NEXT:    }
187 ; CHECK-NEXT:    {
188 ; CHECK-NEXT:     v1.h = vasl(v3.h,v31.h)
189 ; CHECK-NEXT:    }
190 ; CHECK-NEXT:    {
191 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
192 ; CHECK-NEXT:     jumpr r31
193 ; CHECK-NEXT:    }
194   %v0 = shl <64 x i8> %a0, %a1
195   ret <64 x i8> %v0
198 define <64 x i8> @test0031(<64 x i8> %a0, <64 x i8> %a1) #0 {
199 ; CHECK-LABEL: test0031:
200 ; CHECK:       // %bb.0:
201 ; CHECK-NEXT:    {
202 ; CHECK-NEXT:     v3:2.h = vsxt(v0.b)
203 ; CHECK-NEXT:     v31:30.uh = vzxt(v1.ub)
204 ; CHECK-NEXT:    }
205 ; CHECK-NEXT:    {
206 ; CHECK-NEXT:     v0.h = vasr(v2.h,v30.h)
207 ; CHECK-NEXT:    }
208 ; CHECK-NEXT:    {
209 ; CHECK-NEXT:     v1.h = vasr(v3.h,v31.h)
210 ; CHECK-NEXT:    }
211 ; CHECK-NEXT:    {
212 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
213 ; CHECK-NEXT:     jumpr r31
214 ; CHECK-NEXT:    }
215   %v0 = ashr <64 x i8> %a0, %a1
216   ret <64 x i8> %v0
219 define <64 x i8> @test0032(<64 x i8> %a0, <64 x i8> %a1) #0 {
220 ; CHECK-LABEL: test0032:
221 ; CHECK:       // %bb.0:
222 ; CHECK-NEXT:    {
223 ; CHECK-NEXT:     v3:2.uh = vzxt(v0.ub)
224 ; CHECK-NEXT:     v31:30.uh = vzxt(v1.ub)
225 ; CHECK-NEXT:    }
226 ; CHECK-NEXT:    {
227 ; CHECK-NEXT:     v0.h = vlsr(v2.h,v30.h)
228 ; CHECK-NEXT:    }
229 ; CHECK-NEXT:    {
230 ; CHECK-NEXT:     v1.h = vlsr(v3.h,v31.h)
231 ; CHECK-NEXT:    }
232 ; CHECK-NEXT:    {
233 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
234 ; CHECK-NEXT:     jumpr r31
235 ; CHECK-NEXT:    }
236   %v0 = lshr <64 x i8> %a0, %a1
237   ret <64 x i8> %v0
240 define <32 x i16> @test0040(<32 x i16> %a0, <32 x i16> %a1) #0 {
241 ; CHECK-LABEL: test0040:
242 ; CHECK:       // %bb.0:
243 ; CHECK-NEXT:    {
244 ; CHECK-NEXT:     v0.h = vasl(v0.h,v1.h)
245 ; CHECK-NEXT:     jumpr r31
246 ; CHECK-NEXT:    }
247   %v0 = shl <32 x i16> %a0, %a1
248   ret <32 x i16> %v0
251 define <32 x i16> @test0041(<32 x i16> %a0, <32 x i16> %a1) #0 {
252 ; CHECK-LABEL: test0041:
253 ; CHECK:       // %bb.0:
254 ; CHECK-NEXT:    {
255 ; CHECK-NEXT:     v0.h = vasr(v0.h,v1.h)
256 ; CHECK-NEXT:     jumpr r31
257 ; CHECK-NEXT:    }
258   %v0 = ashr <32 x i16> %a0, %a1
259   ret <32 x i16> %v0
262 define <32 x i16> @test0042(<32 x i16> %a0, <32 x i16> %a1) #0 {
263 ; CHECK-LABEL: test0042:
264 ; CHECK:       // %bb.0:
265 ; CHECK-NEXT:    {
266 ; CHECK-NEXT:     v0.h = vlsr(v0.h,v1.h)
267 ; CHECK-NEXT:     jumpr r31
268 ; CHECK-NEXT:    }
269   %v0 = lshr <32 x i16> %a0, %a1
270   ret <32 x i16> %v0
273 define <16 x i32> @test0050(<16 x i32> %a0, <16 x i32> %a1) #0 {
274 ; CHECK-LABEL: test0050:
275 ; CHECK:       // %bb.0:
276 ; CHECK-NEXT:    {
277 ; CHECK-NEXT:     v0.w = vasl(v0.w,v1.w)
278 ; CHECK-NEXT:     jumpr r31
279 ; CHECK-NEXT:    }
280   %v0 = shl <16 x i32> %a0, %a1
281   ret <16 x i32> %v0
284 define <16 x i32> @test0051(<16 x i32> %a0, <16 x i32> %a1) #0 {
285 ; CHECK-LABEL: test0051:
286 ; CHECK:       // %bb.0:
287 ; CHECK-NEXT:    {
288 ; CHECK-NEXT:     v0.w = vasr(v0.w,v1.w)
289 ; CHECK-NEXT:     jumpr r31
290 ; CHECK-NEXT:    }
291   %v0 = ashr <16 x i32> %a0, %a1
292   ret <16 x i32> %v0
295 define <16 x i32> @test0052(<16 x i32> %a0, <16 x i32> %a1) #0 {
296 ; CHECK-LABEL: test0052:
297 ; CHECK:       // %bb.0:
298 ; CHECK-NEXT:    {
299 ; CHECK-NEXT:     v0.w = vlsr(v0.w,v1.w)
300 ; CHECK-NEXT:     jumpr r31
301 ; CHECK-NEXT:    }
302   %v0 = lshr <16 x i32> %a0, %a1
303   ret <16 x i32> %v0
306 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length64b" }