forked from OSchip/llvm-project
[X86] scaleShuffleMask - use size_t Scale to avoid overflow warnings
llvm-svn: 374674
This commit is contained in:
parent
5f2543f8dc
commit
6716512670
|
@ -6920,11 +6920,11 @@ static bool getFauxShuffleMask(SDValue N, const APInt &DemandedElts,
|
|||
!getTargetShuffleInputs(N1, SrcInputs1, SrcMask1, DAG, Depth + 1,
|
||||
ResolveZero))
|
||||
return false;
|
||||
int MaskSize = std::max(SrcMask0.size(), SrcMask1.size());
|
||||
size_t MaskSize = std::max(SrcMask0.size(), SrcMask1.size());
|
||||
SmallVector<int, 64> Mask0, Mask1;
|
||||
scaleShuffleMask<int>(MaskSize / SrcMask0.size(), SrcMask0, Mask0);
|
||||
scaleShuffleMask<int>(MaskSize / SrcMask1.size(), SrcMask1, Mask1);
|
||||
for (int i = 0; i != MaskSize; ++i) {
|
||||
for (size_t i = 0; i != MaskSize; ++i) {
|
||||
if (Mask0[i] == SM_SentinelUndef && Mask1[i] == SM_SentinelUndef)
|
||||
Mask.push_back(SM_SentinelUndef);
|
||||
else if (Mask0[i] == SM_SentinelZero && Mask1[i] == SM_SentinelZero)
|
||||
|
@ -6932,7 +6932,7 @@ static bool getFauxShuffleMask(SDValue N, const APInt &DemandedElts,
|
|||
else if (Mask1[i] == SM_SentinelZero)
|
||||
Mask.push_back(Mask0[i]);
|
||||
else if (Mask0[i] == SM_SentinelZero)
|
||||
Mask.push_back(Mask1[i] + (MaskSize * SrcInputs0.size()));
|
||||
Mask.push_back(Mask1[i] + (int)(MaskSize * SrcInputs0.size()));
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1672,24 +1672,24 @@ namespace llvm {
|
|||
/// mask. This is the reverse process to canWidenShuffleElements, but can
|
||||
/// always succeed.
|
||||
template <typename T>
|
||||
void scaleShuffleMask(int Scale, ArrayRef<T> Mask,
|
||||
void scaleShuffleMask(size_t Scale, ArrayRef<T> Mask,
|
||||
SmallVectorImpl<T> &ScaledMask) {
|
||||
assert(0 < Scale && "Unexpected scaling factor");
|
||||
size_t NumElts = Mask.size();
|
||||
ScaledMask.assign(NumElts * Scale, -1);
|
||||
|
||||
for (int i = 0; i != (int)NumElts; ++i) {
|
||||
for (size_t i = 0; i != NumElts; ++i) {
|
||||
int M = Mask[i];
|
||||
|
||||
// Repeat sentinel values in every mask element.
|
||||
if (M < 0) {
|
||||
for (int s = 0; s != Scale; ++s)
|
||||
for (size_t s = 0; s != Scale; ++s)
|
||||
ScaledMask[(Scale * i) + s] = M;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Scale mask element and increment across each mask element.
|
||||
for (int s = 0; s != Scale; ++s)
|
||||
for (size_t s = 0; s != Scale; ++s)
|
||||
ScaledMask[(Scale * i) + s] = (Scale * M) + s;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue