diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-12-11 00:23:50 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-12-11 00:23:50 +0000 |
commit | 9a63d7ade59efdca1d27b5b3efb995bf50d7f6dc (patch) | |
tree | 44dff81799faaf247356923842224fc5b24ab763 /llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | |
parent | 0d542d350dafd662fb5fe9c00b5a3e4f61ee442f (diff) | |
download | bcm5719-llvm-9a63d7ade59efdca1d27b5b3efb995bf50d7f6dc.tar.gz bcm5719-llvm-9a63d7ade59efdca1d27b5b3efb995bf50d7f6dc.zip |
[X86][InstCombine] Teach InstCombineCalls to turn pshufb intrinsic into a shufflevector if the indices are constant.
llvm-svn: 289348
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index c79aa05c39e..9ae6285d8bd 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -805,11 +805,11 @@ static Value *simplifyX86pshufb(const IntrinsicInst &II, auto *VecTy = cast<VectorType>(II.getType()); auto *MaskEltTy = Type::getInt32Ty(II.getContext()); unsigned NumElts = VecTy->getNumElements(); - assert((NumElts == 16 || NumElts == 32) && + assert((NumElts == 16 || NumElts == 32 || NumElts == 64) && "Unexpected number of elements in shuffle mask!"); // Construct a shuffle mask from constant integers or UNDEFs. - Constant *Indexes[32] = {nullptr}; + Constant *Indexes[64] = {nullptr}; // Each byte in the shuffle control mask forms an index to permute the // corresponding byte in the destination operand. @@ -2081,6 +2081,7 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) { case Intrinsic::x86_ssse3_pshuf_b_128: case Intrinsic::x86_avx2_pshuf_b: + case Intrinsic::x86_avx512_pshuf_b_512: if (Value *V = simplifyX86pshufb(*II, *Builder)) return replaceInstUsesWith(*II, V); break; |