diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-06-13 16:52:02 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-06-13 16:52:02 +0000 |
commit | 54a138a0c50e0050e5ea4d419315e8ef41aaff4a (patch) | |
tree | b28766e6b52f2b2fc2f2c2629dcc9c7a41308ff3 /llvm/lib/Analysis/TargetTransformInfo.cpp | |
parent | ffe60e040358e86a89035327e610de79501d4fb1 (diff) | |
download | bcm5719-llvm-54a138a0c50e0050e5ea4d419315e8ef41aaff4a.tar.gz bcm5719-llvm-54a138a0c50e0050e5ea4d419315e8ef41aaff4a.zip |
[CostModel] Recognise BROADCAST shuffle mask if the elements come from the second src
llvm-svn: 334620
Diffstat (limited to 'llvm/lib/Analysis/TargetTransformInfo.cpp')
-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 a4bb9dd84c9..a470e9765e3 100644 --- a/llvm/lib/Analysis/TargetTransformInfo.cpp +++ b/llvm/lib/Analysis/TargetTransformInfo.cpp @@ -652,10 +652,17 @@ static bool isSingleSourceVectorMask(ArrayRef<int> Mask) { } static bool isZeroEltBroadcastVectorMask(ArrayRef<int> Mask) { - for (unsigned i = 0; i < Mask.size(); ++i) - if (Mask[i] > 0) - return false; - return true; + bool BroadcastLHS = true; + bool BroadcastRHS = true; + unsigned MaskSize = Mask.size(); + + for (unsigned i = 0; i < MaskSize && (BroadcastLHS || BroadcastRHS); ++i) { + if (Mask[i] < 0) + continue; + BroadcastLHS &= (Mask[i] == 0); + BroadcastRHS &= (Mask[i] == (int)MaskSize); + } + return BroadcastLHS || BroadcastRHS; } static bool isIdentityVectorMask(ArrayRef<int> Mask) { |