From 32702cc86a633311b1d4506b27293767334a8169 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Thu, 14 Jun 2018 09:35:00 +0000 Subject: [CostModel] Recognise REVERSE shuffle mask if the elements come from the second src llvm-svn: 334698 --- llvm/lib/Analysis/TargetTransformInfo.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Analysis/TargetTransformInfo.cpp') 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 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 Mask) { -- cgit v1.2.3