1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -mtriple=aarch64 -o - | FileCheck %s
4 define <4 x i16> @addls_v8i8_0(<8 x i8> %s0, <8 x i8> %s1) {
5 ; CHECK-LABEL: addls_v8i8_0:
6 ; CHECK: // %bb.0: // %entry
7 ; CHECK-NEXT: saddl v0.8h, v0.8b, v1.8b
8 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
11 %s0s = sext <8 x i8> %s0 to <8 x i16>
12 %s1s = sext <8 x i8> %s1 to <8 x i16>
13 %t0 = shufflevector <8 x i16> %s0s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
14 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
15 %m = add <4 x i16> %t0, %t1
19 define <4 x i16> @addws_v8i8_0(<4 x i16> %s0, <8 x i8> %s1) {
20 ; CHECK-LABEL: addws_v8i8_0:
21 ; CHECK: // %bb.0: // %entry
22 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
23 ; CHECK-NEXT: saddw v0.8h, v0.8h, v1.8b
24 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
27 %s1s = sext <8 x i8> %s1 to <8 x i16>
28 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
29 %m = add <4 x i16> %s0, %t1
33 define <4 x i16> @addlu_v8i8_0(<8 x i8> %s0, <8 x i8> %s1) {
34 ; CHECK-LABEL: addlu_v8i8_0:
35 ; CHECK: // %bb.0: // %entry
36 ; CHECK-NEXT: uaddl v0.8h, v0.8b, v1.8b
37 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
40 %s0s = zext <8 x i8> %s0 to <8 x i16>
41 %s1s = zext <8 x i8> %s1 to <8 x i16>
42 %t0 = shufflevector <8 x i16> %s0s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
43 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
44 %m = add <4 x i16> %t0, %t1
48 define <4 x i16> @addwu_v8i8_0(<4 x i16> %s0, <8 x i8> %s1) {
49 ; CHECK-LABEL: addwu_v8i8_0:
50 ; CHECK: // %bb.0: // %entry
51 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
52 ; CHECK-NEXT: uaddw v0.8h, v0.8h, v1.8b
53 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
56 %s1s = zext <8 x i8> %s1 to <8 x i16>
57 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
58 %m = add <4 x i16> %s0, %t1
62 define <4 x i16> @subls_v8i8_0(<8 x i8> %s0, <8 x i8> %s1) {
63 ; CHECK-LABEL: subls_v8i8_0:
64 ; CHECK: // %bb.0: // %entry
65 ; CHECK-NEXT: ssubl v0.8h, v0.8b, v1.8b
66 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
69 %s0s = sext <8 x i8> %s0 to <8 x i16>
70 %s1s = sext <8 x i8> %s1 to <8 x i16>
71 %t0 = shufflevector <8 x i16> %s0s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
72 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
73 %m = sub <4 x i16> %t0, %t1
77 define <4 x i16> @subws_v8i8_0(<4 x i16> %s0, <8 x i8> %s1) {
78 ; CHECK-LABEL: subws_v8i8_0:
79 ; CHECK: // %bb.0: // %entry
80 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
81 ; CHECK-NEXT: ssubw v0.8h, v0.8h, v1.8b
82 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
85 %s1s = sext <8 x i8> %s1 to <8 x i16>
86 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
87 %m = sub <4 x i16> %s0, %t1
91 define <4 x i16> @sublu_v8i8_0(<8 x i8> %s0, <8 x i8> %s1) {
92 ; CHECK-LABEL: sublu_v8i8_0:
93 ; CHECK: // %bb.0: // %entry
94 ; CHECK-NEXT: usubl v0.8h, v0.8b, v1.8b
95 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
98 %s0s = zext <8 x i8> %s0 to <8 x i16>
99 %s1s = zext <8 x i8> %s1 to <8 x i16>
100 %t0 = shufflevector <8 x i16> %s0s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
101 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
102 %m = sub <4 x i16> %t0, %t1
106 define <4 x i16> @subwu_v8i8_0(<4 x i16> %s0, <8 x i8> %s1) {
107 ; CHECK-LABEL: subwu_v8i8_0:
108 ; CHECK: // %bb.0: // %entry
109 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
110 ; CHECK-NEXT: usubw v0.8h, v0.8h, v1.8b
111 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
114 %s1s = zext <8 x i8> %s1 to <8 x i16>
115 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
116 %m = sub <4 x i16> %s0, %t1
120 define <4 x i16> @mulls_v8i8_0(<8 x i8> %s0, <8 x i8> %s1) {
121 ; CHECK-LABEL: mulls_v8i8_0:
122 ; CHECK: // %bb.0: // %entry
123 ; CHECK-NEXT: smull v0.8h, v0.8b, v1.8b
124 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
127 %s0s = sext <8 x i8> %s0 to <8 x i16>
128 %s1s = sext <8 x i8> %s1 to <8 x i16>
129 %t0 = shufflevector <8 x i16> %s0s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
130 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
131 %m = mul <4 x i16> %t0, %t1
135 define <4 x i16> @mulws_v8i8_0(<4 x i16> %s0, <8 x i8> %s1) {
136 ; CHECK-LABEL: mulws_v8i8_0:
137 ; CHECK: // %bb.0: // %entry
138 ; CHECK-NEXT: sshll v1.8h, v1.8b, #0
139 ; CHECK-NEXT: mul v0.4h, v0.4h, v1.4h
142 %s1s = sext <8 x i8> %s1 to <8 x i16>
143 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
144 %m = mul <4 x i16> %s0, %t1
148 define <4 x i16> @mullu_v8i8_0(<8 x i8> %s0, <8 x i8> %s1) {
149 ; CHECK-LABEL: mullu_v8i8_0:
150 ; CHECK: // %bb.0: // %entry
151 ; CHECK-NEXT: umull v0.8h, v0.8b, v1.8b
152 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
155 %s0s = zext <8 x i8> %s0 to <8 x i16>
156 %s1s = zext <8 x i8> %s1 to <8 x i16>
157 %t0 = shufflevector <8 x i16> %s0s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
158 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
159 %m = mul <4 x i16> %t0, %t1
163 define <4 x i16> @mulwu_v8i8_0(<4 x i16> %s0, <8 x i8> %s1) {
164 ; CHECK-LABEL: mulwu_v8i8_0:
165 ; CHECK: // %bb.0: // %entry
166 ; CHECK-NEXT: ushll v1.8h, v1.8b, #0
167 ; CHECK-NEXT: mul v0.4h, v0.4h, v1.4h
170 %s1s = zext <8 x i8> %s1 to <8 x i16>
171 %t1 = shufflevector <8 x i16> %s1s, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
172 %m = mul <4 x i16> %s0, %t1
176 define <2 x i32> @addls_v4i16_0(<4 x i16> %s0, <4 x i16> %s1) {
177 ; CHECK-LABEL: addls_v4i16_0:
178 ; CHECK: // %bb.0: // %entry
179 ; CHECK-NEXT: saddl v0.4s, v0.4h, v1.4h
180 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
183 %s0s = sext <4 x i16> %s0 to <4 x i32>
184 %s1s = sext <4 x i16> %s1 to <4 x i32>
185 %t0 = shufflevector <4 x i32> %s0s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
186 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
187 %m = add <2 x i32> %t0, %t1
191 define <2 x i32> @addws_v4i16_0(<2 x i32> %s0, <4 x i16> %s1) {
192 ; CHECK-LABEL: addws_v4i16_0:
193 ; CHECK: // %bb.0: // %entry
194 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
195 ; CHECK-NEXT: saddw v0.4s, v0.4s, v1.4h
196 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
199 %s1s = sext <4 x i16> %s1 to <4 x i32>
200 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
201 %m = add <2 x i32> %s0, %t1
205 define <2 x i32> @addlu_v4i16_0(<4 x i16> %s0, <4 x i16> %s1) {
206 ; CHECK-LABEL: addlu_v4i16_0:
207 ; CHECK: // %bb.0: // %entry
208 ; CHECK-NEXT: uaddl v0.4s, v0.4h, v1.4h
209 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
212 %s0s = zext <4 x i16> %s0 to <4 x i32>
213 %s1s = zext <4 x i16> %s1 to <4 x i32>
214 %t0 = shufflevector <4 x i32> %s0s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
215 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
216 %m = add <2 x i32> %t0, %t1
220 define <2 x i32> @addwu_v4i16_0(<2 x i32> %s0, <4 x i16> %s1) {
221 ; CHECK-LABEL: addwu_v4i16_0:
222 ; CHECK: // %bb.0: // %entry
223 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
224 ; CHECK-NEXT: uaddw v0.4s, v0.4s, v1.4h
225 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
228 %s1s = zext <4 x i16> %s1 to <4 x i32>
229 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
230 %m = add <2 x i32> %s0, %t1
234 define <2 x i32> @subls_v4i16_0(<4 x i16> %s0, <4 x i16> %s1) {
235 ; CHECK-LABEL: subls_v4i16_0:
236 ; CHECK: // %bb.0: // %entry
237 ; CHECK-NEXT: ssubl v0.4s, v0.4h, v1.4h
238 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
241 %s0s = sext <4 x i16> %s0 to <4 x i32>
242 %s1s = sext <4 x i16> %s1 to <4 x i32>
243 %t0 = shufflevector <4 x i32> %s0s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
244 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
245 %m = sub <2 x i32> %t0, %t1
249 define <2 x i32> @subws_v4i16_0(<2 x i32> %s0, <4 x i16> %s1) {
250 ; CHECK-LABEL: subws_v4i16_0:
251 ; CHECK: // %bb.0: // %entry
252 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
253 ; CHECK-NEXT: ssubw v0.4s, v0.4s, v1.4h
254 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
257 %s1s = sext <4 x i16> %s1 to <4 x i32>
258 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
259 %m = sub <2 x i32> %s0, %t1
263 define <2 x i32> @sublu_v4i16_0(<4 x i16> %s0, <4 x i16> %s1) {
264 ; CHECK-LABEL: sublu_v4i16_0:
265 ; CHECK: // %bb.0: // %entry
266 ; CHECK-NEXT: usubl v0.4s, v0.4h, v1.4h
267 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
270 %s0s = zext <4 x i16> %s0 to <4 x i32>
271 %s1s = zext <4 x i16> %s1 to <4 x i32>
272 %t0 = shufflevector <4 x i32> %s0s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
273 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
274 %m = sub <2 x i32> %t0, %t1
278 define <2 x i32> @subwu_v4i16_0(<2 x i32> %s0, <4 x i16> %s1) {
279 ; CHECK-LABEL: subwu_v4i16_0:
280 ; CHECK: // %bb.0: // %entry
281 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
282 ; CHECK-NEXT: usubw v0.4s, v0.4s, v1.4h
283 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
286 %s1s = zext <4 x i16> %s1 to <4 x i32>
287 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
288 %m = sub <2 x i32> %s0, %t1
292 define <2 x i32> @mulls_v4i16_0(<4 x i16> %s0, <4 x i16> %s1) {
293 ; CHECK-LABEL: mulls_v4i16_0:
294 ; CHECK: // %bb.0: // %entry
295 ; CHECK-NEXT: smull v0.4s, v0.4h, v1.4h
296 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
299 %s0s = sext <4 x i16> %s0 to <4 x i32>
300 %s1s = sext <4 x i16> %s1 to <4 x i32>
301 %t0 = shufflevector <4 x i32> %s0s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
302 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
303 %m = mul <2 x i32> %t0, %t1
307 define <2 x i32> @mulws_v4i16_0(<2 x i32> %s0, <4 x i16> %s1) {
308 ; CHECK-LABEL: mulws_v4i16_0:
309 ; CHECK: // %bb.0: // %entry
310 ; CHECK-NEXT: sshll v1.4s, v1.4h, #0
311 ; CHECK-NEXT: mul v0.2s, v0.2s, v1.2s
314 %s1s = sext <4 x i16> %s1 to <4 x i32>
315 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
316 %m = mul <2 x i32> %s0, %t1
320 define <2 x i32> @mullu_v4i16_0(<4 x i16> %s0, <4 x i16> %s1) {
321 ; CHECK-LABEL: mullu_v4i16_0:
322 ; CHECK: // %bb.0: // %entry
323 ; CHECK-NEXT: umull v0.4s, v0.4h, v1.4h
324 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
327 %s0s = zext <4 x i16> %s0 to <4 x i32>
328 %s1s = zext <4 x i16> %s1 to <4 x i32>
329 %t0 = shufflevector <4 x i32> %s0s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
330 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
331 %m = mul <2 x i32> %t0, %t1
335 define <2 x i32> @mulwu_v4i16_0(<2 x i32> %s0, <4 x i16> %s1) {
336 ; CHECK-LABEL: mulwu_v4i16_0:
337 ; CHECK: // %bb.0: // %entry
338 ; CHECK-NEXT: ushll v1.4s, v1.4h, #0
339 ; CHECK-NEXT: mul v0.2s, v0.2s, v1.2s
342 %s1s = zext <4 x i16> %s1 to <4 x i32>
343 %t1 = shufflevector <4 x i32> %s1s, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
344 %m = mul <2 x i32> %s0, %t1
348 define <1 x i64> @addls_v2i32_0(<2 x i32> %s0, <2 x i32> %s1) {
349 ; CHECK-LABEL: addls_v2i32_0:
350 ; CHECK: // %bb.0: // %entry
351 ; CHECK-NEXT: saddl v0.2d, v0.2s, v1.2s
352 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
355 %s0s = sext <2 x i32> %s0 to <2 x i64>
356 %s1s = sext <2 x i32> %s1 to <2 x i64>
357 %t0 = shufflevector <2 x i64> %s0s, <2 x i64> poison, <1 x i32> <i32 0>
358 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
359 %m = add <1 x i64> %t0, %t1
363 define <1 x i64> @addws_v2i32_0(<1 x i64> %s0, <2 x i32> %s1) {
364 ; CHECK-LABEL: addws_v2i32_0:
365 ; CHECK: // %bb.0: // %entry
366 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
367 ; CHECK-NEXT: saddw v0.2d, v0.2d, v1.2s
368 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
371 %s1s = sext <2 x i32> %s1 to <2 x i64>
372 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
373 %m = add <1 x i64> %s0, %t1
377 define <1 x i64> @addlu_v2i32_0(<2 x i32> %s0, <2 x i32> %s1) {
378 ; CHECK-LABEL: addlu_v2i32_0:
379 ; CHECK: // %bb.0: // %entry
380 ; CHECK-NEXT: uaddl v0.2d, v0.2s, v1.2s
381 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
384 %s0s = zext <2 x i32> %s0 to <2 x i64>
385 %s1s = zext <2 x i32> %s1 to <2 x i64>
386 %t0 = shufflevector <2 x i64> %s0s, <2 x i64> poison, <1 x i32> <i32 0>
387 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
388 %m = add <1 x i64> %t0, %t1
392 define <1 x i64> @addwu_v2i32_0(<1 x i64> %s0, <2 x i32> %s1) {
393 ; CHECK-LABEL: addwu_v2i32_0:
394 ; CHECK: // %bb.0: // %entry
395 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
396 ; CHECK-NEXT: uaddw v0.2d, v0.2d, v1.2s
397 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
400 %s1s = zext <2 x i32> %s1 to <2 x i64>
401 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
402 %m = add <1 x i64> %s0, %t1
406 define <1 x i64> @subls_v2i32_0(<2 x i32> %s0, <2 x i32> %s1) {
407 ; CHECK-LABEL: subls_v2i32_0:
408 ; CHECK: // %bb.0: // %entry
409 ; CHECK-NEXT: ssubl v0.2d, v0.2s, v1.2s
410 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
413 %s0s = sext <2 x i32> %s0 to <2 x i64>
414 %s1s = sext <2 x i32> %s1 to <2 x i64>
415 %t0 = shufflevector <2 x i64> %s0s, <2 x i64> poison, <1 x i32> <i32 0>
416 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
417 %m = sub <1 x i64> %t0, %t1
421 define <1 x i64> @subws_v2i32_0(<1 x i64> %s0, <2 x i32> %s1) {
422 ; CHECK-LABEL: subws_v2i32_0:
423 ; CHECK: // %bb.0: // %entry
424 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
425 ; CHECK-NEXT: ssubw v0.2d, v0.2d, v1.2s
426 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
429 %s1s = sext <2 x i32> %s1 to <2 x i64>
430 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
431 %m = sub <1 x i64> %s0, %t1
435 define <1 x i64> @sublu_v2i32_0(<2 x i32> %s0, <2 x i32> %s1) {
436 ; CHECK-LABEL: sublu_v2i32_0:
437 ; CHECK: // %bb.0: // %entry
438 ; CHECK-NEXT: usubl v0.2d, v0.2s, v1.2s
439 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
442 %s0s = zext <2 x i32> %s0 to <2 x i64>
443 %s1s = zext <2 x i32> %s1 to <2 x i64>
444 %t0 = shufflevector <2 x i64> %s0s, <2 x i64> poison, <1 x i32> <i32 0>
445 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
446 %m = sub <1 x i64> %t0, %t1
450 define <1 x i64> @subwu_v2i32_0(<1 x i64> %s0, <2 x i32> %s1) {
451 ; CHECK-LABEL: subwu_v2i32_0:
452 ; CHECK: // %bb.0: // %entry
453 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
454 ; CHECK-NEXT: usubw v0.2d, v0.2d, v1.2s
455 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
458 %s1s = zext <2 x i32> %s1 to <2 x i64>
459 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
460 %m = sub <1 x i64> %s0, %t1
464 define <1 x i64> @mulls_v2i32_0(<2 x i32> %s0, <2 x i32> %s1) {
465 ; CHECK-LABEL: mulls_v2i32_0:
466 ; CHECK: // %bb.0: // %entry
467 ; CHECK-NEXT: smull v0.2d, v0.2s, v1.2s
468 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
471 %s0s = sext <2 x i32> %s0 to <2 x i64>
472 %s1s = sext <2 x i32> %s1 to <2 x i64>
473 %t0 = shufflevector <2 x i64> %s0s, <2 x i64> poison, <1 x i32> <i32 0>
474 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
475 %m = mul <1 x i64> %t0, %t1
479 define <1 x i64> @mulws_v2i32_0(<1 x i64> %s0, <2 x i32> %s1) {
480 ; CHECK-LABEL: mulws_v2i32_0:
481 ; CHECK: // %bb.0: // %entry
482 ; CHECK-NEXT: sshll v1.2d, v1.2s, #0
483 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
484 ; CHECK-NEXT: fmov x8, d0
485 ; CHECK-NEXT: fmov x9, d1
486 ; CHECK-NEXT: mul x8, x8, x9
487 ; CHECK-NEXT: fmov d0, x8
490 %s1s = sext <2 x i32> %s1 to <2 x i64>
491 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
492 %m = mul <1 x i64> %s0, %t1
496 define <1 x i64> @mullu_v2i32_0(<2 x i32> %s0, <2 x i32> %s1) {
497 ; CHECK-LABEL: mullu_v2i32_0:
498 ; CHECK: // %bb.0: // %entry
499 ; CHECK-NEXT: umull v0.2d, v0.2s, v1.2s
500 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
503 %s0s = zext <2 x i32> %s0 to <2 x i64>
504 %s1s = zext <2 x i32> %s1 to <2 x i64>
505 %t0 = shufflevector <2 x i64> %s0s, <2 x i64> poison, <1 x i32> <i32 0>
506 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
507 %m = mul <1 x i64> %t0, %t1
511 define <1 x i64> @mulwu_v2i32_0(<1 x i64> %s0, <2 x i32> %s1) {
512 ; CHECK-LABEL: mulwu_v2i32_0:
513 ; CHECK: // %bb.0: // %entry
514 ; CHECK-NEXT: ushll v1.2d, v1.2s, #0
515 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
516 ; CHECK-NEXT: fmov x8, d0
517 ; CHECK-NEXT: fmov x9, d1
518 ; CHECK-NEXT: mul x8, x8, x9
519 ; CHECK-NEXT: fmov d0, x8
522 %s1s = zext <2 x i32> %s1 to <2 x i64>
523 %t1 = shufflevector <2 x i64> %s1s, <2 x i64> poison, <1 x i32> <i32 0>
524 %m = mul <1 x i64> %s0, %t1