summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2017-02-16 07:35:23 +0000
committerCraig Topper <craig.topper@gmail.com>2017-02-16 07:35:23 +0000
commit3731f4d173680a7a51c48e08fd2b0fe5c17b763f (patch)
tree43511ad8f4429e11360bf8ae1b0d3d844d2e7040 /llvm/lib/Transforms
parente55fb7f6f1a926a4631e4c67d81d85dfc6f03e51 (diff)
downloadbcm5719-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.cpp6
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp7
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");
OpenPOWER on IntegriCloud