1 ; RUN: llc -march=hexagon < %s | FileCheck %s
3 @c = external global <64 x i32>
4 @d = external global <32 x i32>
7 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vtmpy(v{{[0-9]+}}:{{[0-9]+}}.b,r{{[0-9]+}}.b)
8 define void @test1(<64 x i32> %a, i32 %b) #0 {
10 %a.addr = alloca <64 x i32>, align 256
11 %b.addr = alloca i32, align 4
12 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
13 store i32 %b, i32* %b.addr, align 4
14 %0 = load <64 x i32>, <64 x i32>* @c, align 256
15 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
16 %2 = load i32, i32* %b.addr, align 4
17 %3 = call <64 x i32> @llvm.hexagon.V6.vtmpyb.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
18 store <64 x i32> %3, <64 x i32>* @c, align 256
23 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vtmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
24 define void @test2(<64 x i32> %a, i32 %b) #0 {
26 %a.addr = alloca <64 x i32>, align 256
27 %b.addr = alloca i32, align 4
28 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
29 store i32 %b, i32* %b.addr, align 4
30 %0 = load <64 x i32>, <64 x i32>* @c, align 256
31 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
32 %2 = load i32, i32* %b.addr, align 4
33 %3 = call <64 x i32> @llvm.hexagon.V6.vtmpybus.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
34 store <64 x i32> %3, <64 x i32>* @c, align 256
39 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vtmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
40 define void @test3(<64 x i32> %a, i32 %b) #0 {
42 %a.addr = alloca <64 x i32>, align 256
43 %b.addr = alloca i32, align 4
44 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
45 store i32 %b, i32* %b.addr, align 4
46 %0 = load <64 x i32>, <64 x i32>* @c, align 256
47 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
48 %2 = load i32, i32* %b.addr, align 4
49 %3 = call <64 x i32> @llvm.hexagon.V6.vtmpyhb.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
50 store <64 x i32> %3, <64 x i32>* @c, align 256
55 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
56 define void @test4(<32 x i32> %a, i32 %b) #0 {
58 %a.addr = alloca <32 x i32>, align 128
59 %b.addr = alloca i32, align 4
60 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
61 store i32 %b, i32* %b.addr, align 4
62 %0 = load <32 x i32>, <32 x i32>* @d, align 128
63 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
64 %2 = load i32, i32* %b.addr, align 4
65 %3 = call <32 x i32> @llvm.hexagon.V6.vdmpyhb.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
66 store <32 x i32> %3, <32 x i32>* @d, align 128
71 ; CHECK: v{{[0-9]+}}.uw += vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
72 define void @test5(<32 x i32> %a, i32 %b) #0 {
74 %a.addr = alloca <32 x i32>, align 128
75 %b.addr = alloca i32, align 4
76 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
77 store i32 %b, i32* %b.addr, align 4
78 %0 = load <32 x i32>, <32 x i32>* @d, align 128
79 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
80 %2 = load i32, i32* %b.addr, align 4
81 %3 = call <32 x i32> @llvm.hexagon.V6.vrmpyub.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
82 store <32 x i32> %3, <32 x i32>* @d, align 128
87 ; CHECK: v{{[0-9]+}}.w += vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
88 define void @test6(<32 x i32> %a, i32 %b) #0 {
90 %a.addr = alloca <32 x i32>, align 128
91 %b.addr = alloca i32, align 4
92 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
93 store i32 %b, i32* %b.addr, align 4
94 %0 = load <32 x i32>, <32 x i32>* @d, align 128
95 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
96 %2 = load i32, i32* %b.addr, align 4
97 %3 = call <32 x i32> @llvm.hexagon.V6.vrmpybus.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
98 store <32 x i32> %3, <32 x i32>* @d, align 128
102 ; CHECK-LABEL: test7:
103 ; CHECK: v{{[0-9]+}}.h += vdmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
104 define void @test7(<32 x i32> %a, i32 %b) #0 {
106 %a.addr = alloca <32 x i32>, align 128
107 %b.addr = alloca i32, align 4
108 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
109 store i32 %b, i32* %b.addr, align 4
110 %0 = load <32 x i32>, <32 x i32>* @d, align 128
111 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
112 %2 = load i32, i32* %b.addr, align 4
113 %3 = call <32 x i32> @llvm.hexagon.V6.vdmpybus.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
114 store <32 x i32> %3, <32 x i32>* @d, align 128
118 ; CHECK-LABEL: test8:
119 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
120 define void @test8(<64 x i32> %a, i32 %b) #0 {
122 %a.addr = alloca <64 x i32>, align 256
123 %b.addr = alloca i32, align 4
124 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
125 store i32 %b, i32* %b.addr, align 4
126 %0 = load <64 x i32>, <64 x i32>* @c, align 256
127 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
128 %2 = load i32, i32* %b.addr, align 4
129 %3 = call <64 x i32> @llvm.hexagon.V6.vdmpybus.dv.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
130 store <64 x i32> %3, <64 x i32>* @c, align 256
134 ; CHECK-LABEL: test9:
135 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.uh):sat
136 define void @test9(<32 x i32> %a, i32 %b) #0 {
138 %a.addr = alloca <32 x i32>, align 128
139 %b.addr = alloca i32, align 4
140 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
141 store i32 %b, i32* %b.addr, align 4
142 %0 = load <32 x i32>, <32 x i32>* @d, align 128
143 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
144 %2 = load i32, i32* %b.addr, align 4
145 %3 = call <32 x i32> @llvm.hexagon.V6.vdmpyhsusat.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
146 store <32 x i32> %3, <32 x i32>* @d, align 128
150 ; CHECK-LABEL: test10:
151 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.uh,#1):sat
152 define void @test10(<64 x i32> %a, i32 %b) #0 {
154 %a.addr = alloca <64 x i32>, align 256
155 %b.addr = alloca i32, align 4
156 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
157 store i32 %b, i32* %b.addr, align 4
158 %0 = load <32 x i32>, <32 x i32>* @d, align 128
159 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
160 %2 = load i32, i32* %b.addr, align 4
161 %3 = call <32 x i32> @llvm.hexagon.V6.vdmpyhsuisat.acc.128B(<32 x i32> %0, <64 x i32> %1, i32 %2)
162 store <32 x i32> %3, <32 x i32>* @d, align 128
166 ; CHECK-LABEL: test11:
167 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
168 define void @test11(<64 x i32> %a, i32 %b) #0 {
170 %a.addr = alloca <64 x i32>, align 256
171 %b.addr = alloca i32, align 4
172 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
173 store i32 %b, i32* %b.addr, align 4
174 %0 = load <32 x i32>, <32 x i32>* @d, align 128
175 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
176 %2 = load i32, i32* %b.addr, align 4
177 %3 = call <32 x i32> @llvm.hexagon.V6.vdmpyhisat.acc.128B(<32 x i32> %0, <64 x i32> %1, i32 %2)
178 store <32 x i32> %3, <32 x i32>* @d, align 128
182 ; CHECK-LABEL: test12:
183 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
184 define void @test12(<32 x i32> %a, i32 %b) #0 {
186 %a.addr = alloca <32 x i32>, align 128
187 %b.addr = alloca i32, align 4
188 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
189 store i32 %b, i32* %b.addr, align 4
190 %0 = load <32 x i32>, <32 x i32>* @d, align 128
191 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
192 %2 = load i32, i32* %b.addr, align 4
193 %3 = call <32 x i32> @llvm.hexagon.V6.vdmpyhsat.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
194 store <32 x i32> %3, <32 x i32>* @d, align 128
198 ; CHECK-LABEL: test13:
199 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
200 define void @test13(<64 x i32> %a, i32 %b) #0 {
202 %a.addr = alloca <64 x i32>, align 256
203 %b.addr = alloca i32, align 4
204 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
205 store i32 %b, i32* %b.addr, align 4
206 %0 = load <64 x i32>, <64 x i32>* @c, align 256
207 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
208 %2 = load i32, i32* %b.addr, align 4
209 %3 = call <64 x i32> @llvm.hexagon.V6.vdmpyhb.dv.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
210 store <64 x i32> %3, <64 x i32>* @c, align 256
214 ; CHECK-LABEL: test14:
215 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
216 define void @test14(<32 x i32> %a, i32 %b) #0 {
218 %a.addr = alloca <32 x i32>, align 128
219 %b.addr = alloca i32, align 4
220 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
221 store i32 %b, i32* %b.addr, align 4
222 %0 = load <64 x i32>, <64 x i32>* @c, align 256
223 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
224 %2 = load i32, i32* %b.addr, align 4
225 %3 = call <64 x i32> @llvm.hexagon.V6.vmpybus.acc.128B(<64 x i32> %0, <32 x i32> %1, i32 %2)
226 store <64 x i32> %3, <64 x i32>* @c, align 256
230 ; CHECK-LABEL: test15:
231 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vmpa(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
232 define void @test15(<64 x i32> %a, i32 %b) #0 {
234 %a.addr = alloca <64 x i32>, align 256
235 %b.addr = alloca i32, align 4
236 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
237 store i32 %b, i32* %b.addr, align 4
238 %0 = load <64 x i32>, <64 x i32>* @c, align 256
239 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
240 %2 = load i32, i32* %b.addr, align 4
241 %3 = call <64 x i32> @llvm.hexagon.V6.vmpabus.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
242 store <64 x i32> %3, <64 x i32>* @c, align 256
246 ; CHECK-LABEL: test16:
247 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vmpa(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
248 define void @test16(<64 x i32> %a, i32 %b) #0 {
250 %a.addr = alloca <64 x i32>, align 256
251 %b.addr = alloca i32, align 4
252 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
253 store i32 %b, i32* %b.addr, align 4
254 %0 = load <64 x i32>, <64 x i32>* @c, align 256
255 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
256 %2 = load i32, i32* %b.addr, align 4
257 %3 = call <64 x i32> @llvm.hexagon.V6.vmpahb.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
258 store <64 x i32> %3, <64 x i32>* @c, align 256
262 ; CHECK-LABEL: test17:
263 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
264 define void @test17(<32 x i32> %a, i32 %b) #0 {
266 %a.addr = alloca <32 x i32>, align 128
267 %b.addr = alloca i32, align 4
268 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
269 store i32 %b, i32* %b.addr, align 4
270 %0 = load <64 x i32>, <64 x i32>* @c, align 256
271 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
272 %2 = load i32, i32* %b.addr, align 4
273 %3 = call <64 x i32> @llvm.hexagon.V6.vmpyhsat.acc.128B(<64 x i32> %0, <32 x i32> %1, i32 %2)
274 store <64 x i32> %3, <64 x i32>* @c, align 256
278 ; CHECK-LABEL: test18:
279 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw += vmpy(v{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
280 define void @test18(<32 x i32> %a, i32 %b) #0 {
282 %a.addr = alloca <32 x i32>, align 128
283 %b.addr = alloca i32, align 4
284 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
285 store i32 %b, i32* %b.addr, align 4
286 %0 = load <64 x i32>, <64 x i32>* @c, align 256
287 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
288 %2 = load i32, i32* %b.addr, align 4
289 %3 = call <64 x i32> @llvm.hexagon.V6.vmpyuh.acc.128B(<64 x i32> %0, <32 x i32> %1, i32 %2)
290 store <64 x i32> %3, <64 x i32>* @c, align 256
294 ; CHECK-LABEL: test19:
295 ; CHECK: v{{[0-9]+}}.w += vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.b)
296 define void @test19(<32 x i32> %a, i32 %b) #0 {
298 %a.addr = alloca <32 x i32>, align 128
299 %b.addr = alloca i32, align 4
300 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
301 store i32 %b, i32* %b.addr, align 4
302 %0 = load <32 x i32>, <32 x i32>* @d, align 128
303 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
304 %2 = load i32, i32* %b.addr, align 4
305 %3 = call <32 x i32> @llvm.hexagon.V6.vmpyiwb.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
306 store <32 x i32> %3, <32 x i32>* @d, align 128
310 ; CHECK-LABEL: test20:
311 ; CHECK: v{{[0-9]+}}.w += vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.h)
312 define void @test20(<32 x i32> %a, i32 %b) #0 {
314 %a.addr = alloca <32 x i32>, align 128
315 %b.addr = alloca i32, align 4
316 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
317 store i32 %b, i32* %b.addr, align 4
318 %0 = load <32 x i32>, <32 x i32>* @d, align 128
319 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
320 %2 = load i32, i32* %b.addr, align 4
321 %3 = call <32 x i32> @llvm.hexagon.V6.vmpyiwh.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
322 store <32 x i32> %3, <32 x i32>* @d, align 128
326 ; CHECK-LABEL: test21:
327 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw += vdsad(v{{[0-9]+}}:{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
328 define void @test21(<64 x i32> %a, i32 %b) #0 {
330 %a.addr = alloca <64 x i32>, align 256
331 %b.addr = alloca i32, align 4
332 store <64 x i32> %a, <64 x i32>* %a.addr, align 256
333 store i32 %b, i32* %b.addr, align 4
334 %0 = load <64 x i32>, <64 x i32>* @c, align 256
335 %1 = load <64 x i32>, <64 x i32>* %a.addr, align 256
336 %2 = load i32, i32* %b.addr, align 4
337 %3 = call <64 x i32> @llvm.hexagon.V6.vdsaduh.acc.128B(<64 x i32> %0, <64 x i32> %1, i32 %2)
338 store <64 x i32> %3, <64 x i32>* @c, align 256
342 ; CHECK-LABEL: test22:
343 ; CHECK: v{{[0-9]+}}.h += vmpyi(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
344 define void @test22(<32 x i32> %a, i32 %b) #0 {
346 %a.addr = alloca <32 x i32>, align 128
347 %b.addr = alloca i32, align 4
348 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
349 store i32 %b, i32* %b.addr, align 4
350 %0 = load <32 x i32>, <32 x i32>* @d, align 128
351 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
352 %2 = load i32, i32* %b.addr, align 4
353 %3 = call <32 x i32> @llvm.hexagon.V6.vmpyihb.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
354 store <32 x i32> %3, <32 x i32>* @d, align 128
358 ; CHECK-LABEL: test23:
359 ; CHECK: v{{[0-9]+}}.w += vasl(v{{[0-9]+}}.w,r{{[0-9]+}})
360 define void @test23(<32 x i32> %a, i32 %b) #0 {
362 %a.addr = alloca <32 x i32>, align 128
363 %b.addr = alloca i32, align 4
364 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
365 store i32 %b, i32* %b.addr, align 4
366 %0 = load <32 x i32>, <32 x i32>* @d, align 128
367 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
368 %2 = load i32, i32* %b.addr, align 4
369 %3 = call <32 x i32> @llvm.hexagon.V6.vaslw.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
370 store <32 x i32> %3, <32 x i32>* @d, align 128
374 ; CHECK-LABEL: test24:
375 ; CHECK: v{{[0-9]+}}.w += vasr(v{{[0-9]+}}.w,r{{[0-9]+}})
376 define void @test24(<32 x i32> %a, i32 %b) #0 {
378 %a.addr = alloca <32 x i32>, align 128
379 %b.addr = alloca i32, align 4
380 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
381 store i32 %b, i32* %b.addr, align 4
382 %0 = load <32 x i32>, <32 x i32>* @d, align 128
383 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
384 %2 = load i32, i32* %b.addr, align 4
385 %3 = call <32 x i32> @llvm.hexagon.V6.vasrw.acc.128B(<32 x i32> %0, <32 x i32> %1, i32 %2)
386 store <32 x i32> %3, <32 x i32>* @d, align 128
390 ; CHECK-LABEL: test25:
391 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh += vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
392 define void @test25(<32 x i32> %a, i32 %b) #0 {
394 %a.addr = alloca <32 x i32>, align 128
395 %b.addr = alloca i32, align 4
396 store <32 x i32> %a, <32 x i32>* %a.addr, align 128
397 store i32 %b, i32* %b.addr, align 4
398 %0 = load <64 x i32>, <64 x i32>* @c, align 256
399 %1 = load <32 x i32>, <32 x i32>* %a.addr, align 128
400 %2 = load i32, i32* %b.addr, align 4
401 %3 = call <64 x i32> @llvm.hexagon.V6.vmpyub.acc.128B(<64 x i32> %0, <32 x i32> %1, i32 %2)
402 store <64 x i32> %3, <64 x i32>* @c, align 256
406 declare <64 x i32> @llvm.hexagon.V6.vtmpyb.acc.128B(<64 x i32>, <64 x i32>, i32) #0
407 declare <64 x i32> @llvm.hexagon.V6.vtmpybus.acc.128B(<64 x i32>, <64 x i32>, i32) #0
408 declare <64 x i32> @llvm.hexagon.V6.vtmpyhb.acc.128B(<64 x i32>, <64 x i32>, i32) #0
409 declare <32 x i32> @llvm.hexagon.V6.vdmpyhb.acc.128B(<32 x i32>, <32 x i32>, i32) #0
410 declare <32 x i32> @llvm.hexagon.V6.vrmpyub.acc.128B(<32 x i32>, <32 x i32>, i32) #0
411 declare <32 x i32> @llvm.hexagon.V6.vrmpybus.acc.128B(<32 x i32>, <32 x i32>, i32) #0
412 declare <32 x i32> @llvm.hexagon.V6.vdmpybus.acc.128B(<32 x i32>, <32 x i32>, i32) #0
413 declare <64 x i32> @llvm.hexagon.V6.vdmpybus.dv.acc.128B(<64 x i32>, <64 x i32>, i32) #0
414 declare <32 x i32> @llvm.hexagon.V6.vdmpyhsusat.acc.128B(<32 x i32>, <32 x i32>, i32) #0
415 declare <32 x i32> @llvm.hexagon.V6.vdmpyhsuisat.acc.128B(<32 x i32>, <64 x i32>, i32) #0
416 declare <32 x i32> @llvm.hexagon.V6.vdmpyhisat.acc.128B(<32 x i32>, <64 x i32>, i32) #0
417 declare <32 x i32> @llvm.hexagon.V6.vdmpyhsat.acc.128B(<32 x i32>, <32 x i32>, i32) #0
418 declare <64 x i32> @llvm.hexagon.V6.vdmpyhb.dv.acc.128B(<64 x i32>, <64 x i32>, i32) #0
419 declare <64 x i32> @llvm.hexagon.V6.vmpybus.acc.128B(<64 x i32>, <32 x i32>, i32) #0
420 declare <64 x i32> @llvm.hexagon.V6.vmpabus.acc.128B(<64 x i32>, <64 x i32>, i32) #0
421 declare <64 x i32> @llvm.hexagon.V6.vmpahb.acc.128B(<64 x i32>, <64 x i32>, i32) #0
422 declare <64 x i32> @llvm.hexagon.V6.vmpyhsat.acc.128B(<64 x i32>, <32 x i32>, i32) #0
423 declare <64 x i32> @llvm.hexagon.V6.vmpyuh.acc.128B(<64 x i32>, <32 x i32>, i32) #0
424 declare <32 x i32> @llvm.hexagon.V6.vmpyiwb.acc.128B(<32 x i32>, <32 x i32>, i32) #0
425 declare <32 x i32> @llvm.hexagon.V6.vmpyiwh.acc.128B(<32 x i32>, <32 x i32>, i32) #0
426 declare <64 x i32> @llvm.hexagon.V6.vdsaduh.acc.128B(<64 x i32>, <64 x i32>, i32) #0
427 declare <32 x i32> @llvm.hexagon.V6.vmpyihb.acc.128B(<32 x i32>, <32 x i32>, i32) #0
428 declare <32 x i32> @llvm.hexagon.V6.vaslw.acc.128B(<32 x i32>, <32 x i32>, i32) #0
429 declare <32 x i32> @llvm.hexagon.V6.vasrw.acc.128B(<32 x i32>, <32 x i32>, i32) #0
430 declare <64 x i32> @llvm.hexagon.V6.vmpyub.acc.128B(<64 x i32>, <32 x i32>, i32) #0
432 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length128b" }