summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-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