diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-03-06 21:54:52 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-03-06 21:54:52 +0000 |
commit | 253ca348b2ea5fbde89377dfbbedab100cef4e7a (patch) | |
tree | 545634a99ba3b24f8074b422395e6d2024242bea /llvm/lib/Target/X86/Utils/X86ShuffleDecode.cpp | |
parent | dc11054f20a3dc532319217ddc5a9f32a2ccaa07 (diff) | |
download | llvm-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.cpp | 5 |
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); } } |