From ee09c63e57866e6d47964f0094a7d884ae99b7ef Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Sat, 19 Aug 2017 20:26:51 +0000 Subject: [PATCH] [ARM] Factorize the calculation of WhichResult in isV*Mask. NFC. Differential Revision: https://reviews.llvm.org/D36930 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311260 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMISelLowering.cpp | 37 +++++++++++------------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index 320d7ccfbc2..63a96ccde78 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/lib/Target/ARM/ARMISelLowering.cpp @@ -5800,6 +5800,13 @@ static bool isVTBLMask(ArrayRef M, EVT VT) { return VT == MVT::v8i8 && M.size() == 8; } +static unsigned SelectPairHalf(unsigned Elements, ArrayRef Mask, + unsigned Index) { + if (Mask.size() == Elements * 2) + return Index / Elements; + return Mask[Index] == 0 ? 0 : 1; +} + // Checks whether the shuffle mask represents a vector transpose (VTRN) by // checking that pairs of elements in the shuffle mask represent the same index // in each vector, incrementing the expected index by 2 at each step. @@ -5836,10 +5843,7 @@ static bool isVTRNMask(ArrayRef M, EVT VT, unsigned &WhichResult) { // element is undefined, e.g. [-1, 4, 2, 6] will be rejected, because only // M[0] is used to determine WhichResult for (unsigned i = 0; i < M.size(); i += NumElts) { - if (M.size() == NumElts * 2) - WhichResult = i / NumElts; - else - WhichResult = M[i] == 0 ? 0 : 1; + WhichResult = SelectPairHalf(NumElts, M, i); for (unsigned j = 0; j < NumElts; j += 2) { if ((M[i+j] >= 0 && (unsigned) M[i+j] != j + WhichResult) || (M[i+j+1] >= 0 && (unsigned) M[i+j+1] != j + NumElts + WhichResult)) @@ -5866,10 +5870,7 @@ static bool isVTRN_v_undef_Mask(ArrayRef M, EVT VT, unsigned &WhichResult){ return false; for (unsigned i = 0; i < M.size(); i += NumElts) { - if (M.size() == NumElts * 2) - WhichResult = i / NumElts; - else - WhichResult = M[i] == 0 ? 0 : 1; + WhichResult = SelectPairHalf(NumElts, M, i); for (unsigned j = 0; j < NumElts; j += 2) { if ((M[i+j] >= 0 && (unsigned) M[i+j] != j + WhichResult) || (M[i+j+1] >= 0 && (unsigned) M[i+j+1] != j + WhichResult)) @@ -5901,10 +5902,7 @@ static bool isVUZPMask(ArrayRef M, EVT VT, unsigned &WhichResult) { return false; for (unsigned i = 0; i < M.size(); i += NumElts) { - if (M.size() == NumElts * 2) - WhichResult = i / NumElts; - else - WhichResult = M[i] == 0 ? 0 : 1; + WhichResult = SelectPairHalf(NumElts, M, i); for (unsigned j = 0; j < NumElts; ++j) { if (M[i+j] >= 0 && (unsigned) M[i+j] != 2 * j + WhichResult) return false; @@ -5935,10 +5933,7 @@ static bool isVUZP_v_undef_Mask(ArrayRef M, EVT VT, unsigned &WhichResult){ unsigned Half = NumElts / 2; for (unsigned i = 0; i < M.size(); i += NumElts) { - if (M.size() == NumElts * 2) - WhichResult = i / NumElts; - else - WhichResult = M[i] == 0 ? 0 : 1; + WhichResult = SelectPairHalf(NumElts, M, i); for (unsigned j = 0; j < NumElts; j += Half) { unsigned Idx = WhichResult; for (unsigned k = 0; k < Half; ++k) { @@ -5978,10 +5973,7 @@ static bool isVZIPMask(ArrayRef M, EVT VT, unsigned &WhichResult) { return false; for (unsigned i = 0; i < M.size(); i += NumElts) { - if (M.size() == NumElts * 2) - WhichResult = i / NumElts; - else - WhichResult = M[i] == 0 ? 0 : 1; + WhichResult = SelectPairHalf(NumElts, M, i); unsigned Idx = WhichResult * NumElts / 2; for (unsigned j = 0; j < NumElts; j += 2) { if ((M[i+j] >= 0 && (unsigned) M[i+j] != Idx) || @@ -6014,10 +6006,7 @@ static bool isVZIP_v_undef_Mask(ArrayRef M, EVT VT, unsigned &WhichResult){ return false; for (unsigned i = 0; i < M.size(); i += NumElts) { - if (M.size() == NumElts * 2) - WhichResult = i / NumElts; - else - WhichResult = M[i] == 0 ? 0 : 1; + WhichResult = SelectPairHalf(NumElts, M, i); unsigned Idx = WhichResult * NumElts / 2; for (unsigned j = 0; j < NumElts; j += 2) { if ((M[i+j] >= 0 && (unsigned) M[i+j] != Idx) || -- 2.40.0