[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Hexagon / intrinsics-v60-vmpy.ll
blob1e4ef9735c63ec12d19ac7202898bbab44875da5
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 @c = external global <32 x i32>
4 @d = external global <16 x i32>
6 ; CHECK-LABEL: test1:
7 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vtmpy(v{{[0-9]+}}:{{[0-9]+}}.b,r{{[0-9]+}}.b)
8 define void @test1(<32 x i32> %a, i32 %b) #0 {
9 entry:
10   %0 = tail call <32 x i32> @llvm.hexagon.V6.vtmpyb(<32 x i32> %a, i32 %b)
11   store <32 x i32> %0, <32 x i32>* @c, align 128
12   ret void
15 ; CHECK-LABEL: test2:
16 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vtmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
17 define void @test2(<32 x i32> %a, i32 %b) #0 {
18 entry:
19   %0 = tail call <32 x i32> @llvm.hexagon.V6.vtmpybus(<32 x i32> %a, i32 %b)
20   store <32 x i32> %0, <32 x i32>* @c, align 128
21   ret void
24 ; CHECK-LABEL: test3:
25 ; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
26 define void @test3(<16 x i32> %a, i32 %b) #0 {
27 entry:
28   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhb(<16 x i32> %a, i32 %b)
29   store <16 x i32> %0, <16 x i32>* @d, align 64
30   ret void
33 ; CHECK-LABEL: test4:
34 ; CHECK: v{{[0-9]+}}.uw = vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
35 define void @test4(<16 x i32> %a, i32 %b) #0 {
36 entry:
37   %0 = tail call <16 x i32> @llvm.hexagon.V6.vrmpyub(<16 x i32> %a, i32 %b)
38   store <16 x i32> %0, <16 x i32>* @d, align 64
39   ret void
42 ; CHECK-LABEL: test5:
43 ; CHECK: v{{[0-9]+}}.w = vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
44 define void @test5(<16 x i32> %a, i32 %b) #0 {
45 entry:
46   %0 = tail call <16 x i32> @llvm.hexagon.V6.vrmpybus(<16 x i32> %a, i32 %b)
47   store <16 x i32> %0, <16 x i32>* @d, align 64
48   ret void
51 ; CHECK-LABEL: test6:
52 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vdsad(v{{[0-9]+}}:{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
53 define void @test6(<32 x i32> %a, i32 %b) #0 {
54 entry:
55   %0 = tail call <32 x i32> @llvm.hexagon.V6.vdsaduh(<32 x i32> %a, i32 %b)
56   store <32 x i32> %0, <32 x i32>* @c, align 128
57   ret void
60 ; CHECK-LABEL: test7:
61 ; CHECK: v{{[0-9]+}}.h = vdmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
62 define void @test7(<16 x i32> %a, i32 %b) #0 {
63 entry:
64   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpybus(<16 x i32> %a, i32 %b)
65   store <16 x i32> %0, <16 x i32>* @d, align 64
66   ret void
69 ; CHECK-LABEL: test8:
70 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
71 define void @test8(<32 x i32> %a, i32 %b) #0 {
72 entry:
73   %0 = tail call <32 x i32> @llvm.hexagon.V6.vdmpybus.dv(<32 x i32> %a, i32 %b)
74   store <32 x i32> %0, <32 x i32>* @c, align 128
75   ret void
78 ; CHECK-LABEL: test9:
79 ; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.uh):sat
80 define void @test9(<16 x i32> %a, i32 %b) #0 {
81 entry:
82   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhsusat(<16 x i32> %a, i32 %b)
83   store <16 x i32> %0, <16 x i32>* @d, align 64
84   ret void
87 ; CHECK-LABEL: test10:
88 ; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.uh,#1):sat
89 define void @test10(<32 x i32> %a, i32 %b) #0 {
90 entry:
91   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhsuisat(<32 x i32> %a, i32 %b)
92   store <16 x i32> %0, <16 x i32>* @d, align 64
93   ret void
96 ; CHECK-LABEL: test11:
97 ; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
98 define void @test11(<16 x i32> %a, i32 %b) #0 {
99 entry:
100   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhsat(<16 x i32> %a, i32 %b)
101   store <16 x i32> %0, <16 x i32>* @d, align 64
102   ret void
105 ; CHECK-LABEL: test12:
106 ; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
107 define void @test12(<32 x i32> %a, i32 %b) #0 {
108 entry:
109   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhisat(<32 x i32> %a, i32 %b)
110   store <16 x i32> %0, <16 x i32>* @d, align 64
111   ret void
114 ; CHECK-LABEL: test13:
115 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
116 define void @test13(<32 x i32> %a, i32 %b) #0 {
117 entry:
118   %0 = tail call <32 x i32> @llvm.hexagon.V6.vdmpyhb.dv(<32 x i32> %a, i32 %b)
119   store <32 x i32> %0, <32 x i32>* @c, align 128
120   ret void
123 ; CHECK-LABEL: test14:
124 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
125 define void @test14(<16 x i32> %a, i32 %b) #0 {
126 entry:
127   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpybus(<16 x i32> %a, i32 %b)
128   store <32 x i32> %0, <32 x i32>* @c, align 128
129   ret void
132 ; CHECK-LABEL: test15:
133 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpa(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
134 define void @test15(<32 x i32> %a, i32 %b) #0 {
135 entry:
136   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpabus(<32 x i32> %a, i32 %b)
137   store <32 x i32> %0, <32 x i32>* @c, align 128
138   ret void
141 ; CHECK-LABEL: test16:
142 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpa(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
143 define void @test16(<32 x i32> %a, i32 %b) #0 {
144 entry:
145   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpahb(<32 x i32> %a, i32 %b)
146   store <32 x i32> %0, <32 x i32>* @c, align 128
147   ret void
150 ; CHECK-LABEL: test17:
151 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h)
152 define void @test17(<16 x i32> %a, i32 %b) #0 {
153 entry:
154   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyh(<16 x i32> %a, i32 %b)
155   store <32 x i32> %0, <32 x i32>* @c, align 128
156   ret void
159 ; CHECK-LABEL: test18:
160 ; CHECK: v{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):<<1:sat
161 define void @test18(<16 x i32> %a, i32 %b) #0 {
162 entry:
163   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyhss(<16 x i32> %a, i32 %b)
164   store <16 x i32> %0, <16 x i32>* @d, align 64
165   ret void
168 ; CHECK-LABEL: test19:
169 ; CHECK: v{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):<<1:rnd:sat
170 define void @test19(<16 x i32> %a, i32 %b) #0 {
171 entry:
172   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyhsrs(<16 x i32> %a, i32 %b)
173   store <16 x i32> %0, <16 x i32>* @d, align 64
174   ret void
177 ; CHECK-LABEL: test20:
178 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vmpy(v{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
179 define void @test20(<16 x i32> %a, i32 %b) #0 {
180 entry:
181   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyuh(<16 x i32> %a, i32 %b)
182   store <32 x i32> %0, <32 x i32>* @c, align 128
183   ret void
186 ; CHECK-LABEL: test21:
187 ; CHECK: v{{[0-9]+}}.h = vmpyi(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
188 define void @test21(<16 x i32> %a, i32 %b) #0 {
189 entry:
190   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyihb(<16 x i32> %a, i32 %b)
191   store <16 x i32> %0, <16 x i32>* @d, align 64
192   ret void
195 ; CHECK-LABEL: test22:
196 ; CHECK: v{{[0-9]+}} = vror(v{{[0-9]+}},r{{[0-9]+}})
197 define void @test22(<16 x i32> %a, i32 %b) #0 {
198 entry:
199   %0 = tail call <16 x i32> @llvm.hexagon.V6.vror(<16 x i32> %a, i32 %b)
200   store <16 x i32> %0, <16 x i32>* @d, align 64
201   ret void
204 ; CHECK-LABEL: test23:
205 ; CHECK: v{{[0-9]+}}.w = vasr(v{{[0-9]+}}.w,r{{[0-9]+}})
206 define void @test23(<16 x i32> %a, i32 %b) #0 {
207 entry:
208   %0 = tail call <16 x i32> @llvm.hexagon.V6.vasrw(<16 x i32> %a, i32 %b)
209   store <16 x i32> %0, <16 x i32>* @d, align 64
210   ret void
213 ; CHECK-LABEL: test24:
214 ; CHECK: v{{[0-9]+}}.h = vasr(v{{[0-9]+}}.h,r{{[0-9]+}})
215 define void @test24(<16 x i32> %a, i32 %b) #0 {
216 entry:
217   %0 = tail call <16 x i32> @llvm.hexagon.V6.vasrh(<16 x i32> %a, i32 %b)
218   store <16 x i32> %0, <16 x i32>* @d, align 64
219   ret void
222 ; CHECK-LABEL: test25:
223 ; CHECK: v{{[0-9]+}}.w = vasl(v{{[0-9]+}}.w,r{{[0-9]+}})
224 define void @test25(<16 x i32> %a, i32 %b) #0 {
225 entry:
226   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaslw(<16 x i32> %a, i32 %b)
227   store <16 x i32> %0, <16 x i32>* @d, align 64
228   ret void
231 ; CHECK-LABEL: test26:
232 ; CHECK: v{{[0-9]+}}.h = vasl(v{{[0-9]+}}.h,r{{[0-9]+}})
233 define void @test26(<16 x i32> %a, i32 %b) #0 {
234 entry:
235   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaslh(<16 x i32> %a, i32 %b)
236   store <16 x i32> %0, <16 x i32>* @d, align 64
237   ret void
240 ; CHECK-LABEL: test27:
241 ; CHECK: v{{[0-9]+}}.uw = vlsr(v{{[0-9]+}}.uw,r{{[0-9]+}})
242 define void @test27(<16 x i32> %a, i32 %b) #0 {
243 entry:
244   %0 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %a, i32 %b)
245   store <16 x i32> %0, <16 x i32>* @d, align 64
246   ret void
249 ; CHECK-LABEL: test28:
250 ; CHECK: v{{[0-9]+}}.uh = vlsr(v{{[0-9]+}}.uh,r{{[0-9]+}})
251 define void @test28(<16 x i32> %a, i32 %b) #0 {
252 entry:
253   %0 = tail call <16 x i32> @llvm.hexagon.V6.vlsrh(<16 x i32> %a, i32 %b)
254   store <16 x i32> %0, <16 x i32>* @d, align 64
255   ret void
258 ; CHECK-LABEL: test29:
259 ; CHECK: v{{[0-9]+}}.w = vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.h)
260 define void @test29(<16 x i32> %a, i32 %b) #0 {
261 entry:
262   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwh(<16 x i32> %a, i32 %b)
263   store <16 x i32> %0, <16 x i32>* @d, align 64
264   ret void
267 ; CHECK-LABEL: test30:
268 ; CHECK: v{{[0-9]+}}.w = vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.b)
269 define void @test30(<16 x i32> %a, i32 %b) #0 {
270 entry:
271   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %a, i32 %b)
272   store <16 x i32> %0, <16 x i32>* @d, align 64
273   ret void
276 ; CHECK-LABEL: test31:
277 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vtmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
278 define void @test31(<32 x i32> %a, i32 %b) #0 {
279 entry:
280   %0 = tail call <32 x i32> @llvm.hexagon.V6.vtmpyhb(<32 x i32> %a, i32 %b)
281   store <32 x i32> %0, <32 x i32>* @c, align 128
282   ret void
285 ; CHECK-LABEL: test32:
286 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
287 define void @test32(<16 x i32> %a, i32 %b) #0 {
288 entry:
289   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyub(<16 x i32> %a, i32 %b)
290   store <32 x i32> %0, <32 x i32>* @c, align 128
291   ret void
294 ; CHECK-LABEL: test33:
295 ; CHECK: v{{[0-9]+}}.uw = vrmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
296 define void @test33(<16 x i32> %a, <16 x i32> %b) #0 {
297 entry:
298   %0 = tail call <16 x i32> @llvm.hexagon.V6.vrmpyubv(<16 x i32> %a, <16 x i32> %b)
299   store <16 x i32> %0, <16 x i32>* @d, align 64
300   ret void
303 ; CHECK-LABEL: test34:
304 ; CHECK: v{{[0-9]+}}.w = vrmpy(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
305 define void @test34(<16 x i32> %a, <16 x i32> %b) #0 {
306 entry:
307   %0 = tail call <16 x i32> @llvm.hexagon.V6.vrmpybv(<16 x i32> %a, <16 x i32> %b)
308   store <16 x i32> %0, <16 x i32>* @d, align 64
309   ret void
312 ; CHECK-LABEL: test35:
313 ; CHECK: v{{[0-9]+}}.w = vrmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.b)
314 define void @test35(<16 x i32> %a, <16 x i32> %b) #0 {
315 entry:
316   %0 = tail call <16 x i32> @llvm.hexagon.V6.vrmpybusv(<16 x i32> %a, <16 x i32> %b)
317   store <16 x i32> %0, <16 x i32>* @d, align 64
318   ret void
321 ; CHECK-LABEL: test36:
322 ; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
323 define void @test36(<16 x i32> %a, <16 x i32> %b) #0 {
324 entry:
325   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhvsat(<16 x i32> %a, <16 x i32> %b)
326   store <16 x i32> %0, <16 x i32>* @d, align 64
327   ret void
330 ; CHECK-LABEL: test37:
331 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
332 define void @test37(<16 x i32> %a, <16 x i32> %b) #0 {
333 entry:
334   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpybv(<16 x i32> %a, <16 x i32> %b)
335   store <32 x i32> %0, <32 x i32>* @c, align 128
336   ret void
339 ; CHECK-LABEL: test38:
340 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
341 define void @test38(<16 x i32> %a, <16 x i32> %b) #0 {
342 entry:
343   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyubv(<16 x i32> %a, <16 x i32> %b)
344   store <32 x i32> %0, <32 x i32>* @c, align 128
345   ret void
348 ; CHECK-LABEL: test39:
349 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.b)
350 define void @test39(<16 x i32> %a, <16 x i32> %b) #0 {
351 entry:
352   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpybusv(<16 x i32> %a, <16 x i32> %b)
353   store <32 x i32> %0, <32 x i32>* @c, align 128
354   ret void
357 ; CHECK-LABEL: test40:
358 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
359 define void @test40(<16 x i32> %a, <16 x i32> %b) #0 {
360 entry:
361   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyhv(<16 x i32> %a, <16 x i32> %b)
362   store <32 x i32> %0, <32 x i32>* @c, align 128
363   ret void
366 ; CHECK-LABEL: test41:
367 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vmpy(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
368 define void @test41(<16 x i32> %a, <16 x i32> %b) #0 {
369 entry:
370   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyuhv(<16 x i32> %a, <16 x i32> %b)
371   store <32 x i32> %0, <32 x i32>* @c, align 128
372   ret void
375 ; CHECK-LABEL: test42:
376 ; CHECK: v{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h):<<1:rnd:sat
377 define void @test42(<16 x i32> %a, <16 x i32> %b) #0 {
378 entry:
379   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyhvsrs(<16 x i32> %a, <16 x i32> %b)
380   store <16 x i32> %0, <16 x i32>* @d, align 64
381   ret void
384 ; CHECK-LABEL: test43:
385 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.uh)
386 define void @test43(<16 x i32> %a, <16 x i32> %b) #0 {
387 entry:
388   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpyhus(<16 x i32> %a, <16 x i32> %b)
389   store <32 x i32> %0, <32 x i32>* @c, align 128
390   ret void
393 ; CHECK-LABEL: test44:
394 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpa(v{{[0-9]+}}:{{[0-9]+}}.ub,v{{[0-9]+}}:{{[0-9]+}}.b)
395 define void @test44(<32 x i32> %a, <32 x i32> %b) #0 {
396 entry:
397   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpabusv(<32 x i32> %a, <32 x i32> %b)
398   store <32 x i32> %0, <32 x i32>* @c, align 128
399   ret void
402 ; CHECK-LABEL: test45:
403 ; CHECK: v{{[0-9]+}}.h = vmpyi(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
404 define void @test45(<16 x i32> %a, <16 x i32> %b) #0 {
405 entry:
406   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyih(<16 x i32> %a, <16 x i32> %b)
407   store <16 x i32> %0, <16 x i32>* @d, align 64
408   ret void
411 ; CHECK-LABEL: test46:
412 ; CHECK: v{{[0-9]+}}.w = vmpye(v{{[0-9]+}}.w,v{{[0-9]+}}.uh)
413 define void @test46(<16 x i32> %a, <16 x i32> %b) #0 {
414 entry:
415   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyewuh(<16 x i32> %a, <16 x i32> %b)
416   store <16 x i32> %0, <16 x i32>* @d, align 64
417   ret void
420 ; CHECK-LABEL: test47:
421 ; CHECK: v{{[0-9]+}}.w = vmpyo(v{{[0-9]+}}.w,v{{[0-9]+}}.h):<<1:sat
422 define void @test47(<16 x i32> %a, <16 x i32> %b) #0 {
423 entry:
424   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyowh(<16 x i32> %a, <16 x i32> %b)
425   store <16 x i32> %0, <16 x i32>* @d, align 64
426   ret void
429 ; CHECK-LABEL: test48:
430 ; CHECK: v{{[0-9]+}}.w = vmpyie(v{{[0-9]+}}.w,v{{[0-9]+}}.uh)
431 define void @test48(<16 x i32> %a, <16 x i32> %b) #0 {
432 entry:
433   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiewuh(<16 x i32> %a, <16 x i32> %b)
434   store <16 x i32> %0, <16 x i32>* @d, align 64
435   ret void
438 ; CHECK-LABEL: test49:
439 ; CHECK: v{{[0-9]+}}.w = vmpyio(v{{[0-9]+}}.w,v{{[0-9]+}}.h)
440 define void @test49(<16 x i32> %a, <16 x i32> %b) #0 {
441 entry:
442   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiowh(<16 x i32> %a, <16 x i32> %b)
443   store <16 x i32> %0, <16 x i32>* @d, align 64
444   ret void
447 ; CHECK-LABEL: test50:
448 ; CHECK: v{{[0-9]+}}.w = vmpyo(v{{[0-9]+}}.w,v{{[0-9]+}}.h):<<1:rnd:sat
449 define void @test50(<16 x i32> %a, <16 x i32> %b) #0 {
450 entry:
451   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyowh.rnd(<16 x i32> %a, <16 x i32> %b)
452   store <16 x i32> %0, <16 x i32>* @d, align 64
453   ret void
456 ; CHECK-LABEL: test51:
457 ; CHECK: v{{[0-9]+}}.w = vmpyieo(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
458 define void @test51(<16 x i32> %a, <16 x i32> %b) #0 {
459 entry:
460   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmpyieoh(<16 x i32> %a, <16 x i32> %b)
461   store <16 x i32> %0, <16 x i32>* @d, align 64
462   ret void
465 declare <32 x i32> @llvm.hexagon.V6.vtmpyb(<32 x i32>, i32) #0
466 declare <32 x i32> @llvm.hexagon.V6.vtmpybus(<32 x i32>, i32) #0
467 declare <16 x i32> @llvm.hexagon.V6.vdmpyhb(<16 x i32>, i32) #0
468 declare <16 x i32> @llvm.hexagon.V6.vrmpyub(<16 x i32>, i32) #0
469 declare <16 x i32> @llvm.hexagon.V6.vrmpybus(<16 x i32>, i32) #0
470 declare <32 x i32> @llvm.hexagon.V6.vdsaduh(<32 x i32>, i32) #0
471 declare <16 x i32> @llvm.hexagon.V6.vdmpybus(<16 x i32>, i32) #0
472 declare <32 x i32> @llvm.hexagon.V6.vdmpybus.dv(<32 x i32>, i32) #0
473 declare <16 x i32> @llvm.hexagon.V6.vdmpyhsusat(<16 x i32>, i32) #0
474 declare <16 x i32> @llvm.hexagon.V6.vdmpyhsuisat(<32 x i32>, i32) #0
475 declare <16 x i32> @llvm.hexagon.V6.vdmpyhsat(<16 x i32>, i32) #0
476 declare <16 x i32> @llvm.hexagon.V6.vdmpyhisat(<32 x i32>, i32) #0
477 declare <32 x i32> @llvm.hexagon.V6.vdmpyhb.dv(<32 x i32>, i32) #0
478 declare <32 x i32> @llvm.hexagon.V6.vmpybus(<16 x i32>, i32) #0
479 declare <32 x i32> @llvm.hexagon.V6.vmpabus(<32 x i32>, i32) #0
480 declare <32 x i32> @llvm.hexagon.V6.vmpahb(<32 x i32>, i32) #0
481 declare <32 x i32> @llvm.hexagon.V6.vmpyh(<16 x i32>, i32) #0
482 declare <16 x i32> @llvm.hexagon.V6.vmpyhss(<16 x i32>, i32) #0
483 declare <16 x i32> @llvm.hexagon.V6.vmpyhsrs(<16 x i32>, i32) #0
484 declare <32 x i32> @llvm.hexagon.V6.vmpyuh(<16 x i32>, i32) #0
485 declare <16 x i32> @llvm.hexagon.V6.vmpyihb(<16 x i32>, i32) #0
486 declare <16 x i32> @llvm.hexagon.V6.vror(<16 x i32>, i32) #0
487 declare <16 x i32> @llvm.hexagon.V6.vasrw(<16 x i32>, i32) #0
488 declare <16 x i32> @llvm.hexagon.V6.vasrh(<16 x i32>, i32) #0
489 declare <16 x i32> @llvm.hexagon.V6.vaslw(<16 x i32>, i32) #0
490 declare <16 x i32> @llvm.hexagon.V6.vaslh(<16 x i32>, i32) #0
491 declare <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32>, i32) #0
492 declare <16 x i32> @llvm.hexagon.V6.vlsrh(<16 x i32>, i32) #0
493 declare <16 x i32> @llvm.hexagon.V6.vmpyiwh(<16 x i32>, i32) #0
494 declare <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32>, i32) #0
495 declare <32 x i32> @llvm.hexagon.V6.vtmpyhb(<32 x i32>, i32) #0
496 declare <32 x i32> @llvm.hexagon.V6.vmpyub(<16 x i32>, i32) #0
497 declare <16 x i32> @llvm.hexagon.V6.vrmpyubv(<16 x i32>, <16 x i32>) #0
498 declare <16 x i32> @llvm.hexagon.V6.vrmpybv(<16 x i32>, <16 x i32>) #0
499 declare <16 x i32> @llvm.hexagon.V6.vrmpybusv(<16 x i32>, <16 x i32>) #0
500 declare <16 x i32> @llvm.hexagon.V6.vdmpyhvsat(<16 x i32>, <16 x i32>) #0
501 declare <32 x i32> @llvm.hexagon.V6.vmpybv(<16 x i32>, <16 x i32>) #0
502 declare <32 x i32> @llvm.hexagon.V6.vmpyubv(<16 x i32>, <16 x i32>) #0
503 declare <32 x i32> @llvm.hexagon.V6.vmpybusv(<16 x i32>, <16 x i32>) #0
504 declare <32 x i32> @llvm.hexagon.V6.vmpyhv(<16 x i32>, <16 x i32>) #0
505 declare <32 x i32> @llvm.hexagon.V6.vmpyuhv(<16 x i32>, <16 x i32>) #0
506 declare <16 x i32> @llvm.hexagon.V6.vmpyhvsrs(<16 x i32>, <16 x i32>) #0
507 declare <32 x i32> @llvm.hexagon.V6.vmpyhus(<16 x i32>, <16 x i32>) #0
508 declare <32 x i32> @llvm.hexagon.V6.vmpabusv(<32 x i32>, <32 x i32>) #0
509 declare <16 x i32> @llvm.hexagon.V6.vmpyih(<16 x i32>, <16 x i32>) #0
510 declare <16 x i32> @llvm.hexagon.V6.vmpyewuh(<16 x i32>, <16 x i32>) #0
511 declare <16 x i32> @llvm.hexagon.V6.vmpyowh(<16 x i32>, <16 x i32>) #0
512 declare <16 x i32> @llvm.hexagon.V6.vmpyiewuh(<16 x i32>, <16 x i32>) #0
513 declare <16 x i32> @llvm.hexagon.V6.vmpyiowh(<16 x i32>, <16 x i32>) #0
514 declare <16 x i32> @llvm.hexagon.V6.vmpyowh.rnd(<16 x i32>, <16 x i32>) #0
515 declare <16 x i32> @llvm.hexagon.V6.vmpyieoh(<16 x i32>, <16 x i32>) #0
517 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length64b" }