diff options
| author | Craig Topper <craig.topper@gmail.com> | 2017-02-16 07:35:23 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2017-02-16 07:35:23 +0000 |
| commit | 3731f4d173680a7a51c48e08fd2b0fe5c17b763f (patch) | |
| tree | 43511ad8f4429e11360bf8ae1b0d3d844d2e7040 /llvm/lib/Transforms | |
| parent | e55fb7f6f1a926a4631e4c67d81d85dfc6f03e51 (diff) | |
| download | bcm5719-llvm-3731f4d173680a7a51c48e08fd2b0fe5c17b763f.tar.gz bcm5719-llvm-3731f4d173680a7a51c48e08fd2b0fe5c17b763f.zip | |
[AVX-512][InstCombine] Teach InstCombine to optimize 512-bit packss/packus intrinsics like it does 128/256-bit.
llvm-svn: 295294
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp | 7 |
2 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index c26da03a89a..7f34a55638f 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -2630,7 +2630,8 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { case Intrinsic::x86_sse2_packsswb_128: case Intrinsic::x86_avx2_packssdw: case Intrinsic::x86_avx2_packsswb: - // TODO Add support for Intrinsic::x86_avx512_mask_packss* + case Intrinsic::x86_avx512_packssdw_512: + case Intrinsic::x86_avx512_packsswb_512: if (Value *V = simplifyX86pack(*II, *this, *Builder, true)) return replaceInstUsesWith(*II, V); break; @@ -2639,7 +2640,8 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { case Intrinsic::x86_sse41_packusdw: case Intrinsic::x86_avx2_packusdw: case Intrinsic::x86_avx2_packuswb: - // TODO Add support for Intrinsic::x86_avx512_mask_packus* + case Intrinsic::x86_avx512_packusdw_512: + case Intrinsic::x86_avx512_packuswb_512: if (Value *V = simplifyX86pack(*II, *this, *Builder, false)) return replaceInstUsesWith(*II, V); break; diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp index 42ce76b7cc2..e641acbfbd9 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp @@ -1482,8 +1482,11 @@ Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, APInt DemandedElts, case Intrinsic::x86_avx2_packssdw: case Intrinsic::x86_avx2_packsswb: case Intrinsic::x86_avx2_packusdw: - case Intrinsic::x86_avx2_packuswb: { - // TODO Add support for Intrinsic::x86_avx512_mask_pack* + case Intrinsic::x86_avx2_packuswb: + case Intrinsic::x86_avx512_packssdw_512: + case Intrinsic::x86_avx512_packsswb_512: + case Intrinsic::x86_avx512_packusdw_512: + case Intrinsic::x86_avx512_packuswb_512: { auto *Ty0 = II->getArgOperand(0)->getType(); unsigned InnerVWidth = Ty0->getVectorNumElements(); assert(VWidth == (InnerVWidth * 2) && "Unexpected input size"); |

