Skip to content

Commit a70480d

Browse files
committed
[AArch64] Add some tests for mul(shuffle(ext. NFC
1 parent 9a44ed4 commit a70480d

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

llvm/test/CodeGen/AArch64/aarch64-dup-ext.ll

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,120 @@ entry:
255255
%out = mul nsw <8 x i16> %broadcast.splat, %ext.b
256256
ret <8 x i16> %out
257257
}
258+
259+
define <8 x i16> @shufsext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
260+
; CHECK-LABEL: shufsext_v8i8_v8i16:
261+
; CHECK: // %bb.0: // %entry
262+
; CHECK-NEXT: sshll v0.8h, v0.8b, #0
263+
; CHECK-NEXT: sshll v1.8h, v1.8b, #0
264+
; CHECK-NEXT: rev64 v0.8h, v0.8h
265+
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
266+
; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
267+
; CHECK-NEXT: ret
268+
entry:
269+
%in = sext <8 x i8> %src to <8 x i16>
270+
%ext.b = sext <8 x i8> %b to <8 x i16>
271+
%shuf = shufflevector <8 x i16> %in, <8 x i16> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
272+
%out = mul nsw <8 x i16> %shuf, %ext.b
273+
ret <8 x i16> %out
274+
}
275+
276+
define <2 x i64> @shufsext_v2i32_v2i64(<2 x i32> %src, <2 x i32> %b) {
277+
; CHECK-LABEL: shufsext_v2i32_v2i64:
278+
; CHECK: // %bb.0: // %entry
279+
; CHECK-NEXT: sshll v0.2d, v0.2s, #0
280+
; CHECK-NEXT: sshll v1.2d, v1.2s, #0
281+
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
282+
; CHECK-NEXT: fmov x9, d1
283+
; CHECK-NEXT: mov x8, v1.d[1]
284+
; CHECK-NEXT: fmov x10, d0
285+
; CHECK-NEXT: mov x11, v0.d[1]
286+
; CHECK-NEXT: mul x9, x10, x9
287+
; CHECK-NEXT: mul x8, x11, x8
288+
; CHECK-NEXT: fmov d0, x9
289+
; CHECK-NEXT: mov v0.d[1], x8
290+
; CHECK-NEXT: ret
291+
entry:
292+
%in = sext <2 x i32> %src to <2 x i64>
293+
%ext.b = sext <2 x i32> %b to <2 x i64>
294+
%shuf = shufflevector <2 x i64> %in, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
295+
%out = mul nsw <2 x i64> %shuf, %ext.b
296+
ret <2 x i64> %out
297+
}
298+
299+
define <8 x i16> @shufzext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
300+
; CHECK-LABEL: shufzext_v8i8_v8i16:
301+
; CHECK: // %bb.0: // %entry
302+
; CHECK-NEXT: ushll v0.8h, v0.8b, #0
303+
; CHECK-NEXT: ushll v1.8h, v1.8b, #0
304+
; CHECK-NEXT: rev64 v0.8h, v0.8h
305+
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
306+
; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
307+
; CHECK-NEXT: ret
308+
entry:
309+
%in = zext <8 x i8> %src to <8 x i16>
310+
%ext.b = zext <8 x i8> %b to <8 x i16>
311+
%shuf = shufflevector <8 x i16> %in, <8 x i16> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
312+
%out = mul nsw <8 x i16> %shuf, %ext.b
313+
ret <8 x i16> %out
314+
}
315+
316+
define <2 x i64> @shufzext_v2i32_v2i64(<2 x i32> %src, <2 x i32> %b) {
317+
; CHECK-LABEL: shufzext_v2i32_v2i64:
318+
; CHECK: // %bb.0: // %entry
319+
; CHECK-NEXT: sshll v0.2d, v0.2s, #0
320+
; CHECK-NEXT: sshll v1.2d, v1.2s, #0
321+
; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
322+
; CHECK-NEXT: fmov x9, d1
323+
; CHECK-NEXT: mov x8, v1.d[1]
324+
; CHECK-NEXT: fmov x10, d0
325+
; CHECK-NEXT: mov x11, v0.d[1]
326+
; CHECK-NEXT: mul x9, x10, x9
327+
; CHECK-NEXT: mul x8, x11, x8
328+
; CHECK-NEXT: fmov d0, x9
329+
; CHECK-NEXT: mov v0.d[1], x8
330+
; CHECK-NEXT: ret
331+
entry:
332+
%in = sext <2 x i32> %src to <2 x i64>
333+
%ext.b = sext <2 x i32> %b to <2 x i64>
334+
%shuf = shufflevector <2 x i64> %in, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
335+
%out = mul nsw <2 x i64> %shuf, %ext.b
336+
ret <2 x i64> %out
337+
}
338+
339+
define <8 x i16> @shufzext_v8i8_v8i16_twoin(<8 x i8> %src1, <8 x i8> %src2, <8 x i8> %b) {
340+
; CHECK-LABEL: shufzext_v8i8_v8i16_twoin:
341+
; CHECK: // %bb.0: // %entry
342+
; CHECK-NEXT: ushll v0.8h, v0.8b, #0
343+
; CHECK-NEXT: ushll v1.8h, v1.8b, #0
344+
; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
345+
; CHECK-NEXT: ushll v1.8h, v2.8b, #0
346+
; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
347+
; CHECK-NEXT: ret
348+
entry:
349+
%in1 = zext <8 x i8> %src1 to <8 x i16>
350+
%in2 = zext <8 x i8> %src2 to <8 x i16>
351+
%ext.b = zext <8 x i8> %b to <8 x i16>
352+
%shuf = shufflevector <8 x i16> %in1, <8 x i16> %in2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
353+
%out = mul nsw <8 x i16> %shuf, %ext.b
354+
ret <8 x i16> %out
355+
}
356+
357+
define <8 x i16> @shufszext_v8i8_v8i16_twoin(<8 x i8> %src1, <8 x i8> %src2, <8 x i8> %b) {
358+
; CHECK-LABEL: shufszext_v8i8_v8i16_twoin:
359+
; CHECK: // %bb.0: // %entry
360+
; CHECK-NEXT: ushll v0.8h, v0.8b, #0
361+
; CHECK-NEXT: sshll v1.8h, v1.8b, #0
362+
; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
363+
; CHECK-NEXT: ushll v1.8h, v2.8b, #0
364+
; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
365+
; CHECK-NEXT: ret
366+
entry:
367+
%in1 = zext <8 x i8> %src1 to <8 x i16>
368+
%in2 = sext <8 x i8> %src2 to <8 x i16>
369+
%ext.b = zext <8 x i8> %b to <8 x i16>
370+
%shuf = shufflevector <8 x i16> %in1, <8 x i16> %in2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
371+
%out = mul nsw <8 x i16> %shuf, %ext.b
372+
ret <8 x i16> %out
373+
}
374+

0 commit comments

Comments
 (0)