forked from OSchip/llvm-project
[X86] getX86MaskVec - replace mask limit from NumElts < 8 with NumElts <= 4
As noted on PR46885, the number of mask elements should always be a power of 2, so to fix the static analyzer warning we are better off replacing the condition to <= 4, and I've added a pow2 assertion as well.
This commit is contained in:
parent
87c5437afd
commit
807467009d
|
@ -966,19 +966,19 @@ static Value *UpgradeX86PSRLDQIntrinsics(IRBuilder<> &Builder, Value *Op,
|
||||||
|
|
||||||
static Value *getX86MaskVec(IRBuilder<> &Builder, Value *Mask,
|
static Value *getX86MaskVec(IRBuilder<> &Builder, Value *Mask,
|
||||||
unsigned NumElts) {
|
unsigned NumElts) {
|
||||||
|
assert(isPowerOf2_32(NumElts) && "Expected power-of-2 mask elements");
|
||||||
llvm::VectorType *MaskTy = FixedVectorType::get(
|
llvm::VectorType *MaskTy = FixedVectorType::get(
|
||||||
Builder.getInt1Ty(), cast<IntegerType>(Mask->getType())->getBitWidth());
|
Builder.getInt1Ty(), cast<IntegerType>(Mask->getType())->getBitWidth());
|
||||||
Mask = Builder.CreateBitCast(Mask, MaskTy);
|
Mask = Builder.CreateBitCast(Mask, MaskTy);
|
||||||
|
|
||||||
// If we have less than 8 elements, then the starting mask was an i8 and
|
// If we have less than 8 elements (1, 2 or 4), then the starting mask was an
|
||||||
// we need to extract down to the right number of elements.
|
// i8 and we need to extract down to the right number of elements.
|
||||||
if (NumElts < 8) {
|
if (NumElts <= 4) {
|
||||||
int Indices[4];
|
int Indices[4];
|
||||||
for (unsigned i = 0; i != NumElts; ++i)
|
for (unsigned i = 0; i != NumElts; ++i)
|
||||||
Indices[i] = i;
|
Indices[i] = i;
|
||||||
Mask = Builder.CreateShuffleVector(Mask, Mask,
|
Mask = Builder.CreateShuffleVector(
|
||||||
makeArrayRef(Indices, NumElts),
|
Mask, Mask, makeArrayRef(Indices, NumElts), "extract");
|
||||||
"extract");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Mask;
|
return Mask;
|
||||||
|
|
Loading…
Reference in New Issue