[test] Pre-commit llvm.experimental.memset.pattern tests prior to MemoryLocation...
[llvm-project.git] / llvm / test / CodeGen / Hexagon / autohvx / shift-128b.ll
blob1fd09afc1009c3971c43d0ae17d73988adc7e7ce
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=hexagon < %s | FileCheck %s
4 define <128 x i8> @test0000(<128 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 <128 x i8> zeroinitializer, i8 %a1, i32 0
21   %b1 = shufflevector <128 x i8> %b0, <128 x i8> undef, <128 x i32> zeroinitializer
22   %v0 = shl <128 x i8> %a0, %b1
23   ret <128 x i8> %v0
26 define <128 x i8> @test0001(<128 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 <128 x i8> zeroinitializer, i8 %a1, i32 0
43   %b1 = shufflevector <128 x i8> %b0, <128 x i8> undef, <128 x i32> zeroinitializer
44   %v0 = ashr <128 x i8> %a0, %b1
45   ret <128 x i8> %v0
48 define <128 x i8> @test0002(<128 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 <128 x i8> zeroinitializer, i8 %a1, i32 0
65   %b1 = shufflevector <128 x i8> %b0, <128 x i8> undef, <128 x i32> zeroinitializer
66   %v0 = lshr <128 x i8> %a0, %b1
67   ret <128 x i8> %v0
70 define <64 x i16> @test0010(<64 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 <64 x i16> zeroinitializer, i16 %a1, i32 0
78   %b1 = shufflevector <64 x i16> %b0, <64 x i16> undef, <64 x i32> zeroinitializer
79   %v0 = shl <64 x i16> %a0, %b1
80   ret <64 x i16> %v0
83 define <64 x i16> @test0011(<64 x i16> %a0, i16 %a1) #0 {
84 ; CHECK-LABEL: test0011:
85 ; CHECK:       // %bb.0:
86 ; CHECK-NEXT:    {
87 ; CHECK-NEXT:     v0.h = vasr(v0.h,r0)
88 ; CHECK-NEXT:     jumpr r31
89 ; CHECK-NEXT:    }
90   %b0 = insertelement <64 x i16> zeroinitializer, i16 %a1, i32 0
91   %b1 = shufflevector <64 x i16> %b0, <64 x i16> undef, <64 x i32> zeroinitializer
92   %v0 = ashr <64 x i16> %a0, %b1
93   ret <64 x i16> %v0
96 define <64 x i16> @test0012(<64 x i16> %a0, i16 %a1) #0 {
97 ; CHECK-LABEL: test0012:
98 ; CHECK:       // %bb.0:
99 ; CHECK-NEXT:    {
100 ; CHECK-NEXT:     v0.uh = vlsr(v0.uh,r0)
101 ; CHECK-NEXT:     jumpr r31
102 ; CHECK-NEXT:    }
103   %b0 = insertelement <64 x i16> zeroinitializer, i16 %a1, i32 0
104   %b1 = shufflevector <64 x i16> %b0, <64 x i16> undef, <64 x i32> zeroinitializer
105   %v0 = lshr <64 x i16> %a0, %b1
106   ret <64 x i16> %v0
109 define <32 x i32> @test0020(<32 x i32> %a0, i32 %a1) #0 {
110 ; CHECK-LABEL: test0020:
111 ; CHECK:       // %bb.0:
112 ; CHECK-NEXT:    {
113 ; CHECK-NEXT:     v0.w = vasl(v0.w,r0)
114 ; CHECK-NEXT:     jumpr r31
115 ; CHECK-NEXT:    }
116   %b0 = insertelement <32 x i32> zeroinitializer, i32 %a1, i32 0
117   %b1 = shufflevector <32 x i32> %b0, <32 x i32> undef, <32 x i32> zeroinitializer
118   %v0 = shl <32 x i32> %a0, %b1
119   ret <32 x i32> %v0
122 define <32 x i32> @test0021(<32 x i32> %a0, i32 %a1) #0 {
123 ; CHECK-LABEL: test0021:
124 ; CHECK:       // %bb.0:
125 ; CHECK-NEXT:    {
126 ; CHECK-NEXT:     v0.w = vasr(v0.w,r0)
127 ; CHECK-NEXT:     jumpr r31
128 ; CHECK-NEXT:    }
129   %b0 = insertelement <32 x i32> zeroinitializer, i32 %a1, i32 0
130   %b1 = shufflevector <32 x i32> %b0, <32 x i32> undef, <32 x i32> zeroinitializer
131   %v0 = ashr <32 x i32> %a0, %b1
132   ret <32 x i32> %v0
135 define <32 x i32> @test0022(<32 x i32> %a0, i32 %a1) #0 {
136 ; CHECK-LABEL: test0022:
137 ; CHECK:       // %bb.0:
138 ; CHECK-NEXT:    {
139 ; CHECK-NEXT:     v0.uw = vlsr(v0.uw,r0)
140 ; CHECK-NEXT:     jumpr r31
141 ; CHECK-NEXT:    }
142   %b0 = insertelement <32 x i32> zeroinitializer, i32 %a1, i32 0
143   %b1 = shufflevector <32 x i32> %b0, <32 x i32> undef, <32 x i32> zeroinitializer
144   %v0 = lshr <32 x i32> %a0, %b1
145   ret <32 x i32> %v0
148 define <32 x i32> @test0023(<32 x i32> %a0, <32 x i32> %a1, i32 %a2) #0 {
149 ; CHECK-LABEL: test0023:
150 ; CHECK:       // %bb.0:
151 ; CHECK-NEXT:    {
152 ; CHECK-NEXT:     v0.w += vasl(v1.w,r0)
153 ; CHECK-NEXT:     jumpr r31
154 ; CHECK-NEXT:    }
155   %b0 = insertelement <32 x i32> zeroinitializer, i32 %a2, i32 0
156   %b1 = shufflevector <32 x i32> %b0, <32 x i32> undef, <32 x i32> zeroinitializer
157   %v0 = shl <32 x i32> %a1, %b1
158   %v1 = add <32 x i32> %a0, %v0
159   ret <32 x i32> %v1
162 define <32 x i32> @test0024(<32 x i32> %a0, <32 x i32> %a1, i32 %a2) #0 {
163 ; CHECK-LABEL: test0024:
164 ; CHECK:       // %bb.0:
165 ; CHECK-NEXT:    {
166 ; CHECK-NEXT:     v0.w += vasr(v1.w,r0)
167 ; CHECK-NEXT:     jumpr r31
168 ; CHECK-NEXT:    }
169   %b0 = insertelement <32 x i32> zeroinitializer, i32 %a2, i32 0
170   %b1 = shufflevector <32 x i32> %b0, <32 x i32> undef, <32 x i32> zeroinitializer
171   %v0 = ashr <32 x i32> %a1, %b1
172   %v1 = add <32 x i32> %a0, %v0
173   ret <32 x i32> %v1
176 define <128 x i8> @test0030(<128 x i8> %a0, <128 x i8> %a1) #0 {
177 ; CHECK-LABEL: test0030:
178 ; CHECK:       // %bb.0:
179 ; CHECK-NEXT:    {
180 ; CHECK-NEXT:     v3:2.uh = vzxt(v0.ub)
181 ; CHECK-NEXT:     v31:30.uh = vzxt(v1.ub)
182 ; CHECK-NEXT:    }
183 ; CHECK-NEXT:    {
184 ; CHECK-NEXT:     v0.h = vasl(v2.h,v30.h)
185 ; CHECK-NEXT:    }
186 ; CHECK-NEXT:    {
187 ; CHECK-NEXT:     v1.h = vasl(v3.h,v31.h)
188 ; CHECK-NEXT:    }
189 ; CHECK-NEXT:    {
190 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
191 ; CHECK-NEXT:     jumpr r31
192 ; CHECK-NEXT:    }
193   %v0 = shl <128 x i8> %a0, %a1
194   ret <128 x i8> %v0
197 define <128 x i8> @test0031(<128 x i8> %a0, <128 x i8> %a1) #0 {
198 ; CHECK-LABEL: test0031:
199 ; CHECK:       // %bb.0:
200 ; CHECK-NEXT:    {
201 ; CHECK-NEXT:     v3:2.h = vsxt(v0.b)
202 ; CHECK-NEXT:     v31:30.uh = vzxt(v1.ub)
203 ; CHECK-NEXT:    }
204 ; CHECK-NEXT:    {
205 ; CHECK-NEXT:     v0.h = vasr(v2.h,v30.h)
206 ; CHECK-NEXT:    }
207 ; CHECK-NEXT:    {
208 ; CHECK-NEXT:     v1.h = vasr(v3.h,v31.h)
209 ; CHECK-NEXT:    }
210 ; CHECK-NEXT:    {
211 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
212 ; CHECK-NEXT:     jumpr r31
213 ; CHECK-NEXT:    }
214   %v0 = ashr <128 x i8> %a0, %a1
215   ret <128 x i8> %v0
218 define <128 x i8> @test0032(<128 x i8> %a0, <128 x i8> %a1) #0 {
219 ; CHECK-LABEL: test0032:
220 ; CHECK:       // %bb.0:
221 ; CHECK-NEXT:    {
222 ; CHECK-NEXT:     v3:2.uh = vzxt(v0.ub)
223 ; CHECK-NEXT:     v31:30.uh = vzxt(v1.ub)
224 ; CHECK-NEXT:    }
225 ; CHECK-NEXT:    {
226 ; CHECK-NEXT:     v0.h = vlsr(v2.h,v30.h)
227 ; CHECK-NEXT:    }
228 ; CHECK-NEXT:    {
229 ; CHECK-NEXT:     v1.h = vlsr(v3.h,v31.h)
230 ; CHECK-NEXT:    }
231 ; CHECK-NEXT:    {
232 ; CHECK-NEXT:     v0.b = vshuffe(v1.b,v0.b)
233 ; CHECK-NEXT:     jumpr r31
234 ; CHECK-NEXT:    }
235   %v0 = lshr <128 x i8> %a0, %a1
236   ret <128 x i8> %v0
239 define <64 x i16> @test0040(<64 x i16> %a0, <64 x i16> %a1) #0 {
240 ; CHECK-LABEL: test0040:
241 ; CHECK:       // %bb.0:
242 ; CHECK-NEXT:    {
243 ; CHECK-NEXT:     v0.h = vasl(v0.h,v1.h)
244 ; CHECK-NEXT:     jumpr r31
245 ; CHECK-NEXT:    }
246   %v0 = shl <64 x i16> %a0, %a1
247   ret <64 x i16> %v0
250 define <64 x i16> @test0041(<64 x i16> %a0, <64 x i16> %a1) #0 {
251 ; CHECK-LABEL: test0041:
252 ; CHECK:       // %bb.0:
253 ; CHECK-NEXT:    {
254 ; CHECK-NEXT:     v0.h = vasr(v0.h,v1.h)
255 ; CHECK-NEXT:     jumpr r31
256 ; CHECK-NEXT:    }
257   %v0 = ashr <64 x i16> %a0, %a1
258   ret <64 x i16> %v0
261 define <64 x i16> @test0042(<64 x i16> %a0, <64 x i16> %a1) #0 {
262 ; CHECK-LABEL: test0042:
263 ; CHECK:       // %bb.0:
264 ; CHECK-NEXT:    {
265 ; CHECK-NEXT:     v0.h = vlsr(v0.h,v1.h)
266 ; CHECK-NEXT:     jumpr r31
267 ; CHECK-NEXT:    }
268   %v0 = lshr <64 x i16> %a0, %a1
269   ret <64 x i16> %v0
272 define <32 x i32> @test0050(<32 x i32> %a0, <32 x i32> %a1) #0 {
273 ; CHECK-LABEL: test0050:
274 ; CHECK:       // %bb.0:
275 ; CHECK-NEXT:    {
276 ; CHECK-NEXT:     v0.w = vasl(v0.w,v1.w)
277 ; CHECK-NEXT:     jumpr r31
278 ; CHECK-NEXT:    }
279   %v0 = shl <32 x i32> %a0, %a1
280   ret <32 x i32> %v0
283 define <32 x i32> @test0051(<32 x i32> %a0, <32 x i32> %a1) #0 {
284 ; CHECK-LABEL: test0051:
285 ; CHECK:       // %bb.0:
286 ; CHECK-NEXT:    {
287 ; CHECK-NEXT:     v0.w = vasr(v0.w,v1.w)
288 ; CHECK-NEXT:     jumpr r31
289 ; CHECK-NEXT:    }
290   %v0 = ashr <32 x i32> %a0, %a1
291   ret <32 x i32> %v0
294 define <32 x i32> @test0052(<32 x i32> %a0, <32 x i32> %a1) #0 {
295 ; CHECK-LABEL: test0052:
296 ; CHECK:       // %bb.0:
297 ; CHECK-NEXT:    {
298 ; CHECK-NEXT:     v0.w = vlsr(v0.w,v1.w)
299 ; CHECK-NEXT:     jumpr r31
300 ; CHECK-NEXT:    }
301   %v0 = lshr <32 x i32> %a0, %a1
302   ret <32 x i32> %v0
305 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length128b" }