From: Simon Pilgrim Date: Sun, 15 Jan 2017 17:49:04 +0000 (+0000) Subject: [InstCombine][SSE] Tests showing missed opportunities to pass demanded elts through... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4354d8859a54e3114b851aa836baa04456b3fbfd;p=llvm [InstCombine][SSE] Tests showing missed opportunities to pass demanded elts through a pshufb shuffle mask git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292072 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/InstCombine/x86-pshufb.ll b/test/Transforms/InstCombine/x86-pshufb.ll index b37884ddd58..7da216f7e48 100644 --- a/test/Transforms/InstCombine/x86-pshufb.ll +++ b/test/Transforms/InstCombine/x86-pshufb.ll @@ -468,6 +468,53 @@ define <64 x i8> @fold_with_allundef_elts_avx512(<64 x i8> %InVec) { ret <64 x i8> %1 } +; Demanded elts tests. +; FIXME: Missed opportunities to pass demanded elts through the pshufb shuffle mask + +define <16 x i8> @demanded_elts_insertion(<16 x i8> %InVec, <16 x i8> %BaseMask, i8 %M0, i8 %M15) { +; CHECK-LABEL: @demanded_elts_insertion( +; CHECK-NEXT: [[TMP1:%.*]] = insertelement <16 x i8> %BaseMask, i8 %M0, i32 0 +; CHECK-NEXT: [[TMP2:%.*]] = insertelement <16 x i8> [[TMP1]], i8 %M15, i32 15 +; CHECK-NEXT: [[TMP3:%.*]] = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %InVec, <16 x i8> [[TMP2]]) +; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <16 x i8> [[TMP3]], <16 x i8> undef, <16 x i32> +; CHECK-NEXT: ret <16 x i8> [[TMP4]] +; + %1 = insertelement <16 x i8> %BaseMask, i8 %M0, i32 0 + %2 = insertelement <16 x i8> %1, i8 %M15, i32 15 + %3 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %InVec, <16 x i8> %2) + %4 = shufflevector <16 x i8> %3, <16 x i8> undef, <16 x i32> + ret <16 x i8> %4 +} + +define <32 x i8> @demanded_elts_insertion_avx2(<32 x i8> %InVec, <32 x i8> %BaseMask, i8 %M0, i8 %M22) { +; CHECK-LABEL: @demanded_elts_insertion_avx2( +; CHECK-NEXT: [[TMP1:%.*]] = insertelement <32 x i8> %BaseMask, i8 %M0, i32 0 +; CHECK-NEXT: [[TMP2:%.*]] = insertelement <32 x i8> [[TMP1]], i8 %M22, i32 22 +; CHECK-NEXT: [[TMP3:%.*]] = tail call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %InVec, <32 x i8> [[TMP2]]) +; CHECK-NEXT: ret <32 x i8> [[TMP3]] +; + %1 = insertelement <32 x i8> %BaseMask, i8 %M0, i32 0 + %2 = insertelement <32 x i8> %1, i8 %M22, i32 22 + %3 = tail call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %InVec, <32 x i8> %2) + %4 = shufflevector <32 x i8> %3, <32 x i8> undef, <32 x i32> + ret <32 x i8> %4 +} + +define <64 x i8> @demanded_elts_insertion_avx512(<64 x i8> %InVec, <64 x i8> %BaseMask, i8 %M0, i8 %M30) { +; CHECK-LABEL: @demanded_elts_insertion_avx512( +; CHECK-NEXT: [[TMP1:%.*]] = insertelement <64 x i8> %BaseMask, i8 %M0, i32 0 +; CHECK-NEXT: [[TMP2:%.*]] = insertelement <64 x i8> [[TMP1]], i8 %M30, i32 30 +; CHECK-NEXT: [[TMP3:%.*]] = tail call <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8> %InVec, <64 x i8> [[TMP2]]) +; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <64 x i8> [[TMP3]], <64 x i8> undef, <64 x i32> zeroinitializer +; CHECK-NEXT: ret <64 x i8> [[TMP4]] +; + %1 = insertelement <64 x i8> %BaseMask, i8 %M0, i32 0 + %2 = insertelement <64 x i8> %1, i8 %M30, i32 30 + %3 = tail call <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8> %InVec, <64 x i8> %2) + %4 = shufflevector <64 x i8> %3, <64 x i8> undef, <64 x i32> zeroinitializer + ret <64 x i8> %4 +} + declare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) declare <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8>, <32 x i8>) declare <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8>, <64 x i8>)