aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-03-06 21:54:52 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-03-06 21:54:52 +0000
commit253ca348b2ea5fbde89377dfbbedab100cef4e7a (patch)
tree545634a99ba3b24f8074b422395e6d2024242bea /llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp
parentdc11054f20a3dc532319217ddc5a9f32a2ccaa07 (diff)
downloadllvm-253ca348b2ea5fbde89377dfbbedab100cef4e7a.zip
llvm-253ca348b2ea5fbde89377dfbbedab100cef4e7a.tar.gz
llvm-253ca348b2ea5fbde89377dfbbedab100cef4e7a.tar.bz2
[X86][AVX512] Fixed VPERMT2* shuffle mask decoding and enabled target shuffle combining.
Patch to add support for target shuffle combining of X86ISD::VPERMV3 nodes, including support for detecting unary shuffles. This uncovered several issues with the X86ISD::VPERMV3 shuffle mask decoding of non-64 bit shuffle mask elements - the bit masking wasn't being correctly computed. Removed non-constant pool mask decode path as we have no way of testing it right now. Differential Revision: http://reviews.llvm.org/D17916 llvm-svn: 262809
Diffstat (limited to 'llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp')
-rw-r--r--llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp b/llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp
index b7b444a..f007349 100644
--- a/llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp
+++ b/llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp
@@ -482,8 +482,9 @@ void DecodeVPERMVMask(ArrayRef<uint64_t> RawMask,
void DecodeVPERMV3Mask(ArrayRef<uint64_t> RawMask,
SmallVectorImpl<int> &ShuffleMask) {
- for (int i = 0, e = RawMask.size(); i < e; ++i) {
- uint64_t M = RawMask[i];
+ uint64_t EltMaskSize = (RawMask.size() * 2) - 1;
+ for (auto M : RawMask) {
+ M &= EltMaskSize;
ShuffleMask.push_back((int)M);
}
}