[llvm] a70480d - [AArch64] Add some tests for mul(shuffle(ext. NFC
David Green via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 4 15:07:53 PDT 2022
Author: David Green
Date: 2022-04-04T22:54:55+01:00
New Revision: a70480dd13c3317f4f9e2f55dc9d67dfb61d8218
URL: https://github.com/llvm/llvm-project/commit/a70480dd13c3317f4f9e2f55dc9d67dfb61d8218
DIFF: https://github.com/llvm/llvm-project/commit/a70480dd13c3317f4f9e2f55dc9d67dfb61d8218.diff
LOG: [AArch64] Add some tests for mul(shuffle(ext. NFC
Added:
Modified:
llvm/test/CodeGen/AArch64/aarch64-dup-ext.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AArch64/aarch64-dup-ext.ll b/llvm/test/CodeGen/AArch64/aarch64-dup-ext.ll
index cceb79f97bb93..2146221581842 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-dup-ext.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-dup-ext.ll
@@ -255,3 +255,120 @@ entry:
%out = mul nsw <8 x i16> %broadcast.splat, %ext.b
ret <8 x i16> %out
}
+
+define <8 x i16> @shufsext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
+; CHECK-LABEL: shufsext_v8i8_v8i16:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: sshll v0.8h, v0.8b, #0
+; CHECK-NEXT: sshll v1.8h, v1.8b, #0
+; CHECK-NEXT: rev64 v0.8h, v0.8h
+; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
+; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: ret
+entry:
+ %in = sext <8 x i8> %src to <8 x i16>
+ %ext.b = sext <8 x i8> %b to <8 x i16>
+ %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>
+ %out = mul nsw <8 x i16> %shuf, %ext.b
+ ret <8 x i16> %out
+}
+
+define <2 x i64> @shufsext_v2i32_v2i64(<2 x i32> %src, <2 x i32> %b) {
+; CHECK-LABEL: shufsext_v2i32_v2i64:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: sshll v0.2d, v0.2s, #0
+; CHECK-NEXT: sshll v1.2d, v1.2s, #0
+; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
+; CHECK-NEXT: fmov x9, d1
+; CHECK-NEXT: mov x8, v1.d[1]
+; CHECK-NEXT: fmov x10, d0
+; CHECK-NEXT: mov x11, v0.d[1]
+; CHECK-NEXT: mul x9, x10, x9
+; CHECK-NEXT: mul x8, x11, x8
+; CHECK-NEXT: fmov d0, x9
+; CHECK-NEXT: mov v0.d[1], x8
+; CHECK-NEXT: ret
+entry:
+ %in = sext <2 x i32> %src to <2 x i64>
+ %ext.b = sext <2 x i32> %b to <2 x i64>
+ %shuf = shufflevector <2 x i64> %in, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
+ %out = mul nsw <2 x i64> %shuf, %ext.b
+ ret <2 x i64> %out
+}
+
+define <8 x i16> @shufzext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
+; CHECK-LABEL: shufzext_v8i8_v8i16:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: ushll v0.8h, v0.8b, #0
+; CHECK-NEXT: ushll v1.8h, v1.8b, #0
+; CHECK-NEXT: rev64 v0.8h, v0.8h
+; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
+; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: ret
+entry:
+ %in = zext <8 x i8> %src to <8 x i16>
+ %ext.b = zext <8 x i8> %b to <8 x i16>
+ %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>
+ %out = mul nsw <8 x i16> %shuf, %ext.b
+ ret <8 x i16> %out
+}
+
+define <2 x i64> @shufzext_v2i32_v2i64(<2 x i32> %src, <2 x i32> %b) {
+; CHECK-LABEL: shufzext_v2i32_v2i64:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: sshll v0.2d, v0.2s, #0
+; CHECK-NEXT: sshll v1.2d, v1.2s, #0
+; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #8
+; CHECK-NEXT: fmov x9, d1
+; CHECK-NEXT: mov x8, v1.d[1]
+; CHECK-NEXT: fmov x10, d0
+; CHECK-NEXT: mov x11, v0.d[1]
+; CHECK-NEXT: mul x9, x10, x9
+; CHECK-NEXT: mul x8, x11, x8
+; CHECK-NEXT: fmov d0, x9
+; CHECK-NEXT: mov v0.d[1], x8
+; CHECK-NEXT: ret
+entry:
+ %in = sext <2 x i32> %src to <2 x i64>
+ %ext.b = sext <2 x i32> %b to <2 x i64>
+ %shuf = shufflevector <2 x i64> %in, <2 x i64> undef, <2 x i32> <i32 1, i32 0>
+ %out = mul nsw <2 x i64> %shuf, %ext.b
+ ret <2 x i64> %out
+}
+
+define <8 x i16> @shufzext_v8i8_v8i16_twoin(<8 x i8> %src1, <8 x i8> %src2, <8 x i8> %b) {
+; CHECK-LABEL: shufzext_v8i8_v8i16_twoin:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: ushll v0.8h, v0.8b, #0
+; CHECK-NEXT: ushll v1.8h, v1.8b, #0
+; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: ushll v1.8h, v2.8b, #0
+; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: ret
+entry:
+ %in1 = zext <8 x i8> %src1 to <8 x i16>
+ %in2 = zext <8 x i8> %src2 to <8 x i16>
+ %ext.b = zext <8 x i8> %b to <8 x i16>
+ %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>
+ %out = mul nsw <8 x i16> %shuf, %ext.b
+ ret <8 x i16> %out
+}
+
+define <8 x i16> @shufszext_v8i8_v8i16_twoin(<8 x i8> %src1, <8 x i8> %src2, <8 x i8> %b) {
+; CHECK-LABEL: shufszext_v8i8_v8i16_twoin:
+; CHECK: // %bb.0: // %entry
+; CHECK-NEXT: ushll v0.8h, v0.8b, #0
+; CHECK-NEXT: sshll v1.8h, v1.8b, #0
+; CHECK-NEXT: trn1 v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: ushll v1.8h, v2.8b, #0
+; CHECK-NEXT: mul v0.8h, v0.8h, v1.8h
+; CHECK-NEXT: ret
+entry:
+ %in1 = zext <8 x i8> %src1 to <8 x i16>
+ %in2 = sext <8 x i8> %src2 to <8 x i16>
+ %ext.b = zext <8 x i8> %b to <8 x i16>
+ %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>
+ %out = mul nsw <8 x i16> %shuf, %ext.b
+ ret <8 x i16> %out
+}
+
More information about the llvm-commits
mailing list