mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[X86] Pulled out duplicate mask width calculation. NFCI.
llvm-svn: 268861
This commit is contained in:
parent
d0b4e9facb
commit
ecb5f17d8b
@ -24326,6 +24326,7 @@ static bool combineX86ShufflesRecursively(SDValue Op, SDValue Root,
|
||||
OpMask.size() % RootMask.size() == 0) ||
|
||||
OpMask.size() == RootMask.size()) &&
|
||||
"The smaller number of elements must divide the larger.");
|
||||
int MaskWidth = std::max<int>(OpMask.size(), RootMask.size());
|
||||
int RootRatio = std::max<int>(1, OpMask.size() / RootMask.size());
|
||||
int OpRatio = std::max<int>(1, RootMask.size() / OpMask.size());
|
||||
assert(((RootRatio == 1 && OpRatio == 1) ||
|
||||
@ -24333,13 +24334,13 @@ static bool combineX86ShufflesRecursively(SDValue Op, SDValue Root,
|
||||
"Must not have a ratio for both incoming and op masks!");
|
||||
|
||||
SmallVector<int, 16> Mask;
|
||||
Mask.reserve(std::max(OpMask.size(), RootMask.size()));
|
||||
Mask.reserve(MaskWidth);
|
||||
|
||||
// Merge this shuffle operation's mask into our accumulated mask. Note that
|
||||
// this shuffle's mask will be the first applied to the input, followed by the
|
||||
// root mask to get us all the way to the root value arrangement. The reason
|
||||
// for this order is that we are recursing up the operation chain.
|
||||
for (int i = 0, e = std::max(OpMask.size(), RootMask.size()); i < e; ++i) {
|
||||
for (int i = 0; i < MaskWidth; ++i) {
|
||||
int RootIdx = i / RootRatio;
|
||||
if (RootMask[RootIdx] < 0) {
|
||||
// This is a zero or undef lane, we're done.
|
||||
|
Loading…
Reference in New Issue
Block a user