summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/TargetTransformInfo.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-06-14 09:35:00 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-06-14 09:35:00 +0000
commit32702cc86a633311b1d4506b27293767334a8169 (patch)
tree47e8270f3999b20ae4a97b8e7ecf76be2794b70e /llvm/lib/Analysis/TargetTransformInfo.cpp
parent9cf22d03dd77524605834f334e6d543d71db82cb (diff)
downloadbcm5719-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.cpp15
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) {
OpenPOWER on IntegriCloud