diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-06-14 09:35:00 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-06-14 09:35:00 +0000 |
commit | 32702cc86a633311b1d4506b27293767334a8169 (patch) | |
tree | 47e8270f3999b20ae4a97b8e7ecf76be2794b70e /llvm/lib/Analysis/TargetTransformInfo.cpp | |
parent | 9cf22d03dd77524605834f334e6d543d71db82cb (diff) | |
download | bcm5719-llvm-32702cc86a633311b1d4506b27293767334a8169.tar.gz bcm5719-llvm-32702cc86a633311b1d4506b27293767334a8169.zip |
[CostModel] Recognise REVERSE shuffle mask if the elements come from the second src
llvm-svn: 334698
Diffstat (limited to 'llvm/lib/Analysis/TargetTransformInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/TargetTransformInfo.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp index a470e9765e3..ca475e8d7ee 100644 --- a/llvm/lib/Analysis/TargetTransformInfo.cpp +++ b/llvm/lib/Analysis/TargetTransformInfo.cpp @@ -631,10 +631,17 @@ int TargetTransformInfo::getInstructionLatency(const Instruction *I) const { } static bool isReverseVectorMask(ArrayRef<int> Mask) { - for (unsigned i = 0, MaskSize = Mask.size(); i < MaskSize; ++i) - if (Mask[i] >= 0 && Mask[i] != (int)(MaskSize - 1 - i)) - return false; - return true; + bool ReverseLHS = true; + bool ReverseRHS = true; + unsigned MaskSize = Mask.size(); + + for (unsigned i = 0; i < MaskSize && (ReverseLHS || ReverseRHS); ++i) { + if (Mask[i] < 0) + continue; + ReverseLHS &= (Mask[i] == (int)(MaskSize - 1 - i)); + ReverseRHS &= (Mask[i] == (int)(MaskSize + MaskSize - 1 - i)); + } + return ReverseLHS || ReverseRHS; } static bool isSingleSourceVectorMask(ArrayRef<int> Mask) { |