• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=hexagon < %s | FileCheck %s
2
3@c = external global <32 x i32>
4@d = external global <16 x i32>
5
6; CHECK-LABEL: test1:
7; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vtmpy(v{{[0-9]+}}:{{[0-9]+}}.b,r{{[0-9]+}}.b)
8define void @test1(<32 x i32> %a, i32 %b) #0 {
9entry:
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
13}
14
15; CHECK-LABEL: test2:
16; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vtmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
17define void @test2(<32 x i32> %a, i32 %b) #0 {
18entry:
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
22}
23
24; CHECK-LABEL: test3:
25; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
26define void @test3(<16 x i32> %a, i32 %b) #0 {
27entry:
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
31}
32
33; CHECK-LABEL: test4:
34; CHECK: v{{[0-9]+}}.uw = vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
35define void @test4(<16 x i32> %a, i32 %b) #0 {
36entry:
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
40}
41
42; CHECK-LABEL: test5:
43; CHECK: v{{[0-9]+}}.w = vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
44define void @test5(<16 x i32> %a, i32 %b) #0 {
45entry:
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
49}
50
51; CHECK-LABEL: test6:
52; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vdsad(v{{[0-9]+}}:{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
53define void @test6(<32 x i32> %a, i32 %b) #0 {
54entry:
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
58}
59
60; CHECK-LABEL: test7:
61; CHECK: v{{[0-9]+}}.h = vdmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
62define void @test7(<16 x i32> %a, i32 %b) #0 {
63entry:
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
67}
68
69; CHECK-LABEL: test8:
70; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
71define void @test8(<32 x i32> %a, i32 %b) #0 {
72entry:
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
76}
77
78; CHECK-LABEL: test9:
79; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.uh):sat
80define void @test9(<16 x i32> %a, i32 %b) #0 {
81entry:
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
85}
86
87; CHECK-LABEL: test10:
88; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.uh,#1):sat
89define void @test10(<32 x i32> %a, i32 %b) #0 {
90entry:
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
94}
95
96; CHECK-LABEL: test11:
97; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
98define void @test11(<16 x i32> %a, i32 %b) #0 {
99entry:
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
103}
104
105; CHECK-LABEL: test12:
106; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
107define void @test12(<32 x i32> %a, i32 %b) #0 {
108entry:
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
112}
113
114; CHECK-LABEL: test13:
115; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
116define void @test13(<32 x i32> %a, i32 %b) #0 {
117entry:
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
121}
122
123; CHECK-LABEL: test14:
124; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
125define void @test14(<16 x i32> %a, i32 %b) #0 {
126entry:
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
130}
131
132; CHECK-LABEL: test15:
133; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpa(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
134define void @test15(<32 x i32> %a, i32 %b) #0 {
135entry:
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
139}
140
141; CHECK-LABEL: test16:
142; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpa(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
143define void @test16(<32 x i32> %a, i32 %b) #0 {
144entry:
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
148}
149
150; CHECK-LABEL: test17:
151; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h)
152define void @test17(<16 x i32> %a, i32 %b) #0 {
153entry:
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
157}
158
159; CHECK-LABEL: test18:
160; CHECK: v{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):<<1:sat
161define void @test18(<16 x i32> %a, i32 %b) #0 {
162entry:
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
166}
167
168; CHECK-LABEL: test19:
169; CHECK: v{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):<<1:rnd:sat
170define void @test19(<16 x i32> %a, i32 %b) #0 {
171entry:
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
175}
176
177; CHECK-LABEL: test20:
178; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vmpy(v{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
179define void @test20(<16 x i32> %a, i32 %b) #0 {
180entry:
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
184}
185
186; CHECK-LABEL: test21:
187; CHECK: v{{[0-9]+}}.h = vmpyi(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
188define void @test21(<16 x i32> %a, i32 %b) #0 {
189entry:
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
193}
194
195; CHECK-LABEL: test22:
196; CHECK: v{{[0-9]+}} = vror(v{{[0-9]+}},r{{[0-9]+}})
197define void @test22(<16 x i32> %a, i32 %b) #0 {
198entry:
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
202}
203
204; CHECK-LABEL: test23:
205; CHECK: v{{[0-9]+}}.w = vasr(v{{[0-9]+}}.w,r{{[0-9]+}})
206define void @test23(<16 x i32> %a, i32 %b) #0 {
207entry:
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
211}
212
213; CHECK-LABEL: test24:
214; CHECK: v{{[0-9]+}}.h = vasr(v{{[0-9]+}}.h,r{{[0-9]+}})
215define void @test24(<16 x i32> %a, i32 %b) #0 {
216entry:
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
220}
221
222; CHECK-LABEL: test25:
223; CHECK: v{{[0-9]+}}.w = vasl(v{{[0-9]+}}.w,r{{[0-9]+}})
224define void @test25(<16 x i32> %a, i32 %b) #0 {
225entry:
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
229}
230
231; CHECK-LABEL: test26:
232; CHECK: v{{[0-9]+}}.h = vasl(v{{[0-9]+}}.h,r{{[0-9]+}})
233define void @test26(<16 x i32> %a, i32 %b) #0 {
234entry:
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
238}
239
240; CHECK-LABEL: test27:
241; CHECK: v{{[0-9]+}}.uw = vlsr(v{{[0-9]+}}.uw,r{{[0-9]+}})
242define void @test27(<16 x i32> %a, i32 %b) #0 {
243entry:
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
247}
248
249; CHECK-LABEL: test28:
250; CHECK: v{{[0-9]+}}.uh = vlsr(v{{[0-9]+}}.uh,r{{[0-9]+}})
251define void @test28(<16 x i32> %a, i32 %b) #0 {
252entry:
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
256}
257
258; CHECK-LABEL: test29:
259; CHECK: v{{[0-9]+}}.w = vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.h)
260define void @test29(<16 x i32> %a, i32 %b) #0 {
261entry:
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
265}
266
267; CHECK-LABEL: test30:
268; CHECK: v{{[0-9]+}}.w = vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.b)
269define void @test30(<16 x i32> %a, i32 %b) #0 {
270entry:
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
274}
275
276; CHECK-LABEL: test31:
277; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vtmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
278define void @test31(<32 x i32> %a, i32 %b) #0 {
279entry:
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
283}
284
285; CHECK-LABEL: test32:
286; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
287define void @test32(<16 x i32> %a, i32 %b) #0 {
288entry:
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
292}
293
294; CHECK-LABEL: test33:
295; CHECK: v{{[0-9]+}}.uw = vrmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
296define void @test33(<16 x i32> %a, <16 x i32> %b) #0 {
297entry:
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
301}
302
303; CHECK-LABEL: test34:
304; CHECK: v{{[0-9]+}}.w = vrmpy(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
305define void @test34(<16 x i32> %a, <16 x i32> %b) #0 {
306entry:
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
310}
311
312; CHECK-LABEL: test35:
313; CHECK: v{{[0-9]+}}.w = vrmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.b)
314define void @test35(<16 x i32> %a, <16 x i32> %b) #0 {
315entry:
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
319}
320
321; CHECK-LABEL: test36:
322; CHECK: v{{[0-9]+}}.w = vdmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
323define void @test36(<16 x i32> %a, <16 x i32> %b) #0 {
324entry:
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
328}
329
330; CHECK-LABEL: test37:
331; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
332define void @test37(<16 x i32> %a, <16 x i32> %b) #0 {
333entry:
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
337}
338
339; CHECK-LABEL: test38:
340; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
341define void @test38(<16 x i32> %a, <16 x i32> %b) #0 {
342entry:
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
346}
347
348; CHECK-LABEL: test39:
349; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.b)
350define void @test39(<16 x i32> %a, <16 x i32> %b) #0 {
351entry:
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
355}
356
357; CHECK-LABEL: test40:
358; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
359define void @test40(<16 x i32> %a, <16 x i32> %b) #0 {
360entry:
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
364}
365
366; CHECK-LABEL: test41:
367; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vmpy(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
368define void @test41(<16 x i32> %a, <16 x i32> %b) #0 {
369entry:
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
373}
374
375; CHECK-LABEL: test42:
376; CHECK: v{{[0-9]+}}.h = vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h):<<1:rnd:sat
377define void @test42(<16 x i32> %a, <16 x i32> %b) #0 {
378entry:
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
382}
383
384; CHECK-LABEL: test43:
385; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.uh)
386define void @test43(<16 x i32> %a, <16 x i32> %b) #0 {
387entry:
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
391}
392
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)
395define void @test44(<32 x i32> %a, <32 x i32> %b) #0 {
396entry:
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
400}
401
402; CHECK-LABEL: test45:
403; CHECK: v{{[0-9]+}}.h = vmpyi(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
404define void @test45(<16 x i32> %a, <16 x i32> %b) #0 {
405entry:
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
409}
410
411; CHECK-LABEL: test46:
412; CHECK: v{{[0-9]+}}.w = vmpye(v{{[0-9]+}}.w,v{{[0-9]+}}.uh)
413define void @test46(<16 x i32> %a, <16 x i32> %b) #0 {
414entry:
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
418}
419
420; CHECK-LABEL: test47:
421; CHECK: v{{[0-9]+}}.w = vmpyo(v{{[0-9]+}}.w,v{{[0-9]+}}.h):<<1:sat
422define void @test47(<16 x i32> %a, <16 x i32> %b) #0 {
423entry:
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
427}
428
429; CHECK-LABEL: test48:
430; CHECK: v{{[0-9]+}}.w = vmpyie(v{{[0-9]+}}.w,v{{[0-9]+}}.uh)
431define void @test48(<16 x i32> %a, <16 x i32> %b) #0 {
432entry:
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
436}
437
438; CHECK-LABEL: test49:
439; CHECK: v{{[0-9]+}}.w = vmpyio(v{{[0-9]+}}.w,v{{[0-9]+}}.h)
440define void @test49(<16 x i32> %a, <16 x i32> %b) #0 {
441entry:
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
445}
446
447; CHECK-LABEL: test50:
448; CHECK: v{{[0-9]+}}.w = vmpyo(v{{[0-9]+}}.w,v{{[0-9]+}}.h):<<1:rnd:sat
449define void @test50(<16 x i32> %a, <16 x i32> %b) #0 {
450entry:
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
454}
455
456; CHECK-LABEL: test51:
457; CHECK: v{{[0-9]+}}.w = vmpyieo(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
458define void @test51(<16 x i32> %a, <16 x i32> %b) #0 {
459entry:
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
463}
464
465declare <32 x i32> @llvm.hexagon.V6.vtmpyb(<32 x i32>, i32) #0
466declare <32 x i32> @llvm.hexagon.V6.vtmpybus(<32 x i32>, i32) #0
467declare <16 x i32> @llvm.hexagon.V6.vdmpyhb(<16 x i32>, i32) #0
468declare <16 x i32> @llvm.hexagon.V6.vrmpyub(<16 x i32>, i32) #0
469declare <16 x i32> @llvm.hexagon.V6.vrmpybus(<16 x i32>, i32) #0
470declare <32 x i32> @llvm.hexagon.V6.vdsaduh(<32 x i32>, i32) #0
471declare <16 x i32> @llvm.hexagon.V6.vdmpybus(<16 x i32>, i32) #0
472declare <32 x i32> @llvm.hexagon.V6.vdmpybus.dv(<32 x i32>, i32) #0
473declare <16 x i32> @llvm.hexagon.V6.vdmpyhsusat(<16 x i32>, i32) #0
474declare <16 x i32> @llvm.hexagon.V6.vdmpyhsuisat(<32 x i32>, i32) #0
475declare <16 x i32> @llvm.hexagon.V6.vdmpyhsat(<16 x i32>, i32) #0
476declare <16 x i32> @llvm.hexagon.V6.vdmpyhisat(<32 x i32>, i32) #0
477declare <32 x i32> @llvm.hexagon.V6.vdmpyhb.dv(<32 x i32>, i32) #0
478declare <32 x i32> @llvm.hexagon.V6.vmpybus(<16 x i32>, i32) #0
479declare <32 x i32> @llvm.hexagon.V6.vmpabus(<32 x i32>, i32) #0
480declare <32 x i32> @llvm.hexagon.V6.vmpahb(<32 x i32>, i32) #0
481declare <32 x i32> @llvm.hexagon.V6.vmpyh(<16 x i32>, i32) #0
482declare <16 x i32> @llvm.hexagon.V6.vmpyhss(<16 x i32>, i32) #0
483declare <16 x i32> @llvm.hexagon.V6.vmpyhsrs(<16 x i32>, i32) #0
484declare <32 x i32> @llvm.hexagon.V6.vmpyuh(<16 x i32>, i32) #0
485declare <16 x i32> @llvm.hexagon.V6.vmpyihb(<16 x i32>, i32) #0
486declare <16 x i32> @llvm.hexagon.V6.vror(<16 x i32>, i32) #0
487declare <16 x i32> @llvm.hexagon.V6.vasrw(<16 x i32>, i32) #0
488declare <16 x i32> @llvm.hexagon.V6.vasrh(<16 x i32>, i32) #0
489declare <16 x i32> @llvm.hexagon.V6.vaslw(<16 x i32>, i32) #0
490declare <16 x i32> @llvm.hexagon.V6.vaslh(<16 x i32>, i32) #0
491declare <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32>, i32) #0
492declare <16 x i32> @llvm.hexagon.V6.vlsrh(<16 x i32>, i32) #0
493declare <16 x i32> @llvm.hexagon.V6.vmpyiwh(<16 x i32>, i32) #0
494declare <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32>, i32) #0
495declare <32 x i32> @llvm.hexagon.V6.vtmpyhb(<32 x i32>, i32) #0
496declare <32 x i32> @llvm.hexagon.V6.vmpyub(<16 x i32>, i32) #0
497declare <16 x i32> @llvm.hexagon.V6.vrmpyubv(<16 x i32>, <16 x i32>) #0
498declare <16 x i32> @llvm.hexagon.V6.vrmpybv(<16 x i32>, <16 x i32>) #0
499declare <16 x i32> @llvm.hexagon.V6.vrmpybusv(<16 x i32>, <16 x i32>) #0
500declare <16 x i32> @llvm.hexagon.V6.vdmpyhvsat(<16 x i32>, <16 x i32>) #0
501declare <32 x i32> @llvm.hexagon.V6.vmpybv(<16 x i32>, <16 x i32>) #0
502declare <32 x i32> @llvm.hexagon.V6.vmpyubv(<16 x i32>, <16 x i32>) #0
503declare <32 x i32> @llvm.hexagon.V6.vmpybusv(<16 x i32>, <16 x i32>) #0
504declare <32 x i32> @llvm.hexagon.V6.vmpyhv(<16 x i32>, <16 x i32>) #0
505declare <32 x i32> @llvm.hexagon.V6.vmpyuhv(<16 x i32>, <16 x i32>) #0
506declare <16 x i32> @llvm.hexagon.V6.vmpyhvsrs(<16 x i32>, <16 x i32>) #0
507declare <32 x i32> @llvm.hexagon.V6.vmpyhus(<16 x i32>, <16 x i32>) #0
508declare <32 x i32> @llvm.hexagon.V6.vmpabusv(<32 x i32>, <32 x i32>) #0
509declare <16 x i32> @llvm.hexagon.V6.vmpyih(<16 x i32>, <16 x i32>) #0
510declare <16 x i32> @llvm.hexagon.V6.vmpyewuh(<16 x i32>, <16 x i32>) #0
511declare <16 x i32> @llvm.hexagon.V6.vmpyowh(<16 x i32>, <16 x i32>) #0
512declare <16 x i32> @llvm.hexagon.V6.vmpyiewuh(<16 x i32>, <16 x i32>) #0
513declare <16 x i32> @llvm.hexagon.V6.vmpyiowh(<16 x i32>, <16 x i32>) #0
514declare <16 x i32> @llvm.hexagon.V6.vmpyowh.rnd(<16 x i32>, <16 x i32>) #0
515declare <16 x i32> @llvm.hexagon.V6.vmpyieoh(<16 x i32>, <16 x i32>) #0
516
517attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length64b" }
518