diff options
Diffstat (limited to 'llvm/lib')
-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) { |