forked from OSchip/llvm-project
[SVE] Eliminate calls to default-false VectorType::get() from IR
Reviewers: efriedma, kmclaughlin, sdesmalen, dexonsmith, dblaikie Reviewed By: efriedma Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D80261
This commit is contained in:
parent
e636e6b79a
commit
900f78a714
|
@ -49,7 +49,7 @@ public:
|
|||
PointerType *PtrTy = cast<PointerType>(DataPtr->getType());
|
||||
Type *EltTy = PtrTy->getElementType();
|
||||
|
||||
Type *RetType = VectorType::get(EltTy, Rows * Columns);
|
||||
auto *RetType = FixedVectorType::get(EltTy, Rows * Columns);
|
||||
|
||||
Value *Ops[] = {DataPtr, Stride, B.getInt32(Rows), B.getInt32(Columns)};
|
||||
Type *OverloadedTypes[] = {RetType, PtrTy};
|
||||
|
@ -82,8 +82,8 @@ public:
|
|||
CallInst *CreateMatrixTranspose(Value *Matrix, unsigned Rows,
|
||||
unsigned Columns, const Twine &Name = "") {
|
||||
auto *OpType = cast<VectorType>(Matrix->getType());
|
||||
Type *ReturnType =
|
||||
VectorType::get(OpType->getElementType(), Rows * Columns);
|
||||
auto *ReturnType =
|
||||
FixedVectorType::get(OpType->getElementType(), Rows * Columns);
|
||||
|
||||
Type *OverloadedTypes[] = {ReturnType};
|
||||
Value *Ops[] = {Matrix, B.getInt32(Rows), B.getInt32(Columns)};
|
||||
|
@ -101,8 +101,8 @@ public:
|
|||
auto *LHSType = cast<VectorType>(LHS->getType());
|
||||
auto *RHSType = cast<VectorType>(RHS->getType());
|
||||
|
||||
Type *ReturnType =
|
||||
VectorType::get(LHSType->getElementType(), LHSRows * RHSColumns);
|
||||
auto *ReturnType =
|
||||
FixedVectorType::get(LHSType->getElementType(), LHSRows * RHSColumns);
|
||||
|
||||
Value *Ops[] = {LHS, RHS, B.getInt32(LHSRows), B.getInt32(LHSColumns),
|
||||
B.getInt32(RHSColumns)};
|
||||
|
|
|
@ -42,7 +42,7 @@ static bool UpgradePTESTIntrinsic(Function* F, Intrinsic::ID IID,
|
|||
// Check whether this is an old version of the function, which received
|
||||
// v4f32 arguments.
|
||||
Type *Arg0Type = F->getFunctionType()->getParamType(0);
|
||||
if (Arg0Type != VectorType::get(Type::getFloatTy(F->getContext()), 4))
|
||||
if (Arg0Type != FixedVectorType::get(Type::getFloatTy(F->getContext()), 4))
|
||||
return false;
|
||||
|
||||
// Yes, it's old, replace it with new version.
|
||||
|
@ -903,7 +903,7 @@ static Value *UpgradeX86PSLLDQIntrinsics(IRBuilder<> &Builder,
|
|||
unsigned NumElts = ResultTy->getNumElements() * 8;
|
||||
|
||||
// Bitcast from a 64-bit element type to a byte element type.
|
||||
Type *VecTy = VectorType::get(Builder.getInt8Ty(), NumElts);
|
||||
Type *VecTy = FixedVectorType::get(Builder.getInt8Ty(), NumElts);
|
||||
Op = Builder.CreateBitCast(Op, VecTy, "cast");
|
||||
|
||||
// We'll be shuffling in zeroes.
|
||||
|
@ -937,7 +937,7 @@ static Value *UpgradeX86PSRLDQIntrinsics(IRBuilder<> &Builder, Value *Op,
|
|||
unsigned NumElts = ResultTy->getNumElements() * 8;
|
||||
|
||||
// Bitcast from a 64-bit element type to a byte element type.
|
||||
Type *VecTy = VectorType::get(Builder.getInt8Ty(), NumElts);
|
||||
Type *VecTy = FixedVectorType::get(Builder.getInt8Ty(), NumElts);
|
||||
Op = Builder.CreateBitCast(Op, VecTy, "cast");
|
||||
|
||||
// We'll be shuffling in zeroes.
|
||||
|
@ -965,8 +965,8 @@ static Value *UpgradeX86PSRLDQIntrinsics(IRBuilder<> &Builder, Value *Op,
|
|||
|
||||
static Value *getX86MaskVec(IRBuilder<> &Builder, Value *Mask,
|
||||
unsigned NumElts) {
|
||||
llvm::VectorType *MaskTy = llvm::VectorType::get(Builder.getInt1Ty(),
|
||||
cast<IntegerType>(Mask->getType())->getBitWidth());
|
||||
llvm::VectorType *MaskTy = FixedVectorType::get(
|
||||
Builder.getInt1Ty(), cast<IntegerType>(Mask->getType())->getBitWidth());
|
||||
Mask = Builder.CreateBitCast(Mask, MaskTy);
|
||||
|
||||
// If we have less than 8 elements, then the starting mask was an i8 and
|
||||
|
@ -1002,9 +1002,8 @@ static Value *EmitX86ScalarSelect(IRBuilder<> &Builder, Value *Mask,
|
|||
if (C->isAllOnesValue())
|
||||
return Op0;
|
||||
|
||||
llvm::VectorType *MaskTy =
|
||||
llvm::VectorType::get(Builder.getInt1Ty(),
|
||||
Mask->getType()->getIntegerBitWidth());
|
||||
auto *MaskTy = FixedVectorType::get(Builder.getInt1Ty(),
|
||||
Mask->getType()->getIntegerBitWidth());
|
||||
Mask = Builder.CreateBitCast(Mask, MaskTy);
|
||||
Mask = Builder.CreateExtractElement(Mask, (uint64_t)0);
|
||||
return Builder.CreateSelect(Mask, Op0, Op1);
|
||||
|
@ -1371,9 +1370,11 @@ static Value *upgradeMaskedCompare(IRBuilder<> &Builder, CallInst &CI,
|
|||
|
||||
Value *Cmp;
|
||||
if (CC == 3) {
|
||||
Cmp = Constant::getNullValue(llvm::VectorType::get(Builder.getInt1Ty(), NumElts));
|
||||
Cmp = Constant::getNullValue(
|
||||
FixedVectorType::get(Builder.getInt1Ty(), NumElts));
|
||||
} else if (CC == 7) {
|
||||
Cmp = Constant::getAllOnesValue(llvm::VectorType::get(Builder.getInt1Ty(), NumElts));
|
||||
Cmp = Constant::getAllOnesValue(
|
||||
FixedVectorType::get(Builder.getInt1Ty(), NumElts));
|
||||
} else {
|
||||
ICmpInst::Predicate Pred;
|
||||
switch (CC) {
|
||||
|
@ -1756,7 +1757,7 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
|
|||
Value *Arg0 = CI->getArgOperand(0);
|
||||
Value *Arg1 = CI->getArgOperand(1);
|
||||
|
||||
Type *NewVecTy = VectorType::get(Type::getInt64Ty(C), 2);
|
||||
auto *NewVecTy = FixedVectorType::get(Type::getInt64Ty(C), 2);
|
||||
Value *BC0 = Builder.CreateBitCast(Arg1, NewVecTy, "cast");
|
||||
Value *Elt = Builder.CreateExtractElement(BC0, (uint64_t)0);
|
||||
Value *BC = Builder.CreateBitCast(Arg0,
|
||||
|
@ -2161,7 +2162,7 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
|
|||
Rep = Builder.CreateShuffleVector(Rep, Rep, ArrayRef<int>{0, 1, 2, 3});
|
||||
}
|
||||
Rep = Builder.CreateBitCast(
|
||||
Rep, VectorType::get(Type::getHalfTy(C), NumDstElts));
|
||||
Rep, FixedVectorType::get(Type::getHalfTy(C), NumDstElts));
|
||||
Rep = Builder.CreateFPExt(Rep, DstTy, "cvtph2ps");
|
||||
if (CI->getNumArgOperands() >= 3)
|
||||
Rep = EmitX86Select(Builder, CI->getArgOperand(2), Rep,
|
||||
|
@ -2335,7 +2336,7 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
|
|||
// Replace vbroadcastf128/vbroadcasti128 with a vector load+shuffle.
|
||||
Type *EltTy = cast<VectorType>(CI->getType())->getElementType();
|
||||
unsigned NumSrcElts = 128 / EltTy->getPrimitiveSizeInBits();
|
||||
Type *VT = VectorType::get(EltTy, NumSrcElts);
|
||||
auto *VT = FixedVectorType::get(EltTy, NumSrcElts);
|
||||
Value *Op = Builder.CreatePointerCast(CI->getArgOperand(0),
|
||||
PointerType::getUnqual(VT));
|
||||
Value *Load = Builder.CreateAlignedLoad(VT, Op, Align(1));
|
||||
|
@ -3658,13 +3659,13 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
|
|||
// So, the only thing required is a bitcast for both arguments.
|
||||
// First, check the arguments have the old type.
|
||||
Value *Arg0 = CI->getArgOperand(0);
|
||||
if (Arg0->getType() != VectorType::get(Type::getFloatTy(C), 4))
|
||||
if (Arg0->getType() != FixedVectorType::get(Type::getFloatTy(C), 4))
|
||||
return;
|
||||
|
||||
// Old intrinsic, add bitcasts
|
||||
Value *Arg1 = CI->getArgOperand(1);
|
||||
|
||||
Type *NewVecTy = VectorType::get(Type::getInt64Ty(C), 2);
|
||||
auto *NewVecTy = FixedVectorType::get(Type::getInt64Ty(C), 2);
|
||||
|
||||
Value *BC0 = Builder.CreateBitCast(Arg0, NewVecTy, "cast");
|
||||
Value *BC1 = Builder.CreateBitCast(Arg1, NewVecTy, "cast");
|
||||
|
|
|
@ -881,7 +881,7 @@ Constant *llvm::ConstantFoldShuffleVectorInstruction(Constant *V1, Constant *V2,
|
|||
|
||||
// Undefined shuffle mask -> undefined value.
|
||||
if (all_of(Mask, [](int Elt) { return Elt == UndefMaskElem; })) {
|
||||
return UndefValue::get(VectorType::get(EltTy, MaskNumElts));
|
||||
return UndefValue::get(FixedVectorType::get(EltTy, MaskNumElts));
|
||||
}
|
||||
|
||||
// If the mask is all zeros this is a splat, no need to go through all
|
||||
|
@ -2287,13 +2287,13 @@ Constant *llvm::ConstantFoldGetElementPtr(Type *PointeeTy, Constant *C,
|
|||
Type *OrigGEPTy = PointerType::get(Ty, PtrTy->getAddressSpace());
|
||||
Type *GEPTy = PointerType::get(Ty, PtrTy->getAddressSpace());
|
||||
if (VectorType *VT = dyn_cast<VectorType>(C->getType()))
|
||||
GEPTy = VectorType::get(OrigGEPTy, VT->getNumElements());
|
||||
GEPTy = FixedVectorType::get(OrigGEPTy, VT->getNumElements());
|
||||
|
||||
// The GEP returns a vector of pointers when one of more of
|
||||
// its arguments is a vector.
|
||||
for (unsigned i = 0, e = Idxs.size(); i != e; ++i) {
|
||||
if (auto *VT = dyn_cast<VectorType>(Idxs[i]->getType())) {
|
||||
GEPTy = VectorType::get(OrigGEPTy, VT->getNumElements());
|
||||
GEPTy = FixedVectorType::get(OrigGEPTy, VT->getNumElements());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2528,7 +2528,7 @@ Constant *llvm::ConstantFoldGetElementPtr(Type *PointeeTy, Constant *C,
|
|||
// overflow trouble.
|
||||
Type *ExtendedTy = Type::getIntNTy(Div->getContext(), CommonExtendedWidth);
|
||||
if (UseVector)
|
||||
ExtendedTy = VectorType::get(
|
||||
ExtendedTy = FixedVectorType::get(
|
||||
ExtendedTy,
|
||||
IsPrevIdxVector
|
||||
? cast<VectorType>(PrevIdx->getType())->getNumElements()
|
||||
|
|
|
@ -1187,13 +1187,13 @@ ConstantVector::ConstantVector(VectorType *T, ArrayRef<Constant *> V)
|
|||
Constant *ConstantVector::get(ArrayRef<Constant*> V) {
|
||||
if (Constant *C = getImpl(V))
|
||||
return C;
|
||||
VectorType *Ty = VectorType::get(V.front()->getType(), V.size());
|
||||
auto *Ty = FixedVectorType::get(V.front()->getType(), V.size());
|
||||
return Ty->getContext().pImpl->VectorConstants.getOrCreate(Ty, V);
|
||||
}
|
||||
|
||||
Constant *ConstantVector::getImpl(ArrayRef<Constant*> V) {
|
||||
assert(!V.empty() && "Vectors can't be empty");
|
||||
VectorType *T = VectorType::get(V.front()->getType(), V.size());
|
||||
auto *T = FixedVectorType::get(V.front()->getType(), V.size());
|
||||
|
||||
// If this is an all-undef or all-zero vector, return a
|
||||
// ConstantAggregateZero or UndefValue.
|
||||
|
@ -1960,7 +1960,7 @@ Constant *ConstantExpr::getAddrSpaceCast(Constant *C, Type *DstTy,
|
|||
Type *MidTy = PointerType::get(DstElemTy, SrcScalarTy->getAddressSpace());
|
||||
if (VectorType *VT = dyn_cast<VectorType>(DstTy)) {
|
||||
// Handle vectors of pointers.
|
||||
MidTy = VectorType::get(MidTy, VT->getNumElements());
|
||||
MidTy = FixedVectorType::get(MidTy, VT->getNumElements());
|
||||
}
|
||||
C = getBitCast(C, MidTy);
|
||||
}
|
||||
|
@ -2742,32 +2742,32 @@ Constant *ConstantDataArray::getString(LLVMContext &Context,
|
|||
/// count and element type matching the ArrayRef passed in. Note that this
|
||||
/// can return a ConstantAggregateZero object.
|
||||
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint8_t> Elts){
|
||||
Type *Ty = VectorType::get(Type::getInt8Ty(Context), Elts.size());
|
||||
auto *Ty = FixedVectorType::get(Type::getInt8Ty(Context), Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 1), Ty);
|
||||
}
|
||||
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){
|
||||
Type *Ty = VectorType::get(Type::getInt16Ty(Context), Elts.size());
|
||||
auto *Ty = FixedVectorType::get(Type::getInt16Ty(Context), Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 2), Ty);
|
||||
}
|
||||
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){
|
||||
Type *Ty = VectorType::get(Type::getInt32Ty(Context), Elts.size());
|
||||
auto *Ty = FixedVectorType::get(Type::getInt32Ty(Context), Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 4), Ty);
|
||||
}
|
||||
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){
|
||||
Type *Ty = VectorType::get(Type::getInt64Ty(Context), Elts.size());
|
||||
auto *Ty = FixedVectorType::get(Type::getInt64Ty(Context), Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 8), Ty);
|
||||
}
|
||||
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<float> Elts) {
|
||||
Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size());
|
||||
auto *Ty = FixedVectorType::get(Type::getFloatTy(Context), Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 4), Ty);
|
||||
}
|
||||
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<double> Elts) {
|
||||
Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size());
|
||||
auto *Ty = FixedVectorType::get(Type::getDoubleTy(Context), Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 8), Ty);
|
||||
}
|
||||
|
@ -2782,14 +2782,14 @@ Constant *ConstantDataVector::getFP(Type *ElementType,
|
|||
ArrayRef<uint16_t> Elts) {
|
||||
assert((ElementType->isHalfTy() || ElementType->isBFloatTy()) &&
|
||||
"Element type is not a 16-bit float type");
|
||||
Type *Ty = VectorType::get(ElementType, Elts.size());
|
||||
auto *Ty = FixedVectorType::get(ElementType, Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 2), Ty);
|
||||
}
|
||||
Constant *ConstantDataVector::getFP(Type *ElementType,
|
||||
ArrayRef<uint32_t> Elts) {
|
||||
assert(ElementType->isFloatTy() && "Element type is not a 32-bit float type");
|
||||
Type *Ty = VectorType::get(ElementType, Elts.size());
|
||||
auto *Ty = FixedVectorType::get(ElementType, Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 4), Ty);
|
||||
}
|
||||
|
@ -2797,7 +2797,7 @@ Constant *ConstantDataVector::getFP(Type *ElementType,
|
|||
ArrayRef<uint64_t> Elts) {
|
||||
assert(ElementType->isDoubleTy() &&
|
||||
"Element type is not a 64-bit float type");
|
||||
Type *Ty = VectorType::get(ElementType, Elts.size());
|
||||
auto *Ty = FixedVectorType::get(ElementType, Elts.size());
|
||||
const char *Data = reinterpret_cast<const char *>(Elts.data());
|
||||
return getImpl(StringRef(Data, Elts.size() * 8), Ty);
|
||||
}
|
||||
|
|
|
@ -756,7 +756,7 @@ LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace) {
|
|||
}
|
||||
|
||||
LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount) {
|
||||
return wrap(VectorType::get(unwrap(ElementType), ElementCount));
|
||||
return wrap(FixedVectorType::get(unwrap(ElementType), ElementCount));
|
||||
}
|
||||
|
||||
LLVMTypeRef LLVMGetElementType(LLVMTypeRef WrappedTy) {
|
||||
|
|
|
@ -792,7 +792,7 @@ Type *DataLayout::getIntPtrType(Type *Ty) const {
|
|||
unsigned NumBits = getPointerTypeSizeInBits(Ty);
|
||||
IntegerType *IntTy = IntegerType::get(Ty->getContext(), NumBits);
|
||||
if (VectorType *VecTy = dyn_cast<VectorType>(Ty))
|
||||
return VectorType::get(IntTy, VecTy->getNumElements());
|
||||
return FixedVectorType::get(IntTy, VecTy->getNumElements());
|
||||
return IntTy;
|
||||
}
|
||||
|
||||
|
@ -814,7 +814,7 @@ Type *DataLayout::getIndexType(Type *Ty) const {
|
|||
unsigned NumBits = getIndexTypeSizeInBits(Ty);
|
||||
IntegerType *IntTy = IntegerType::get(Ty->getContext(), NumBits);
|
||||
if (VectorType *VecTy = dyn_cast<VectorType>(Ty))
|
||||
return VectorType::get(IntTy, VecTy->getNumElements());
|
||||
return FixedVectorType::get(IntTy, VecTy->getNumElements());
|
||||
return IntTy;
|
||||
}
|
||||
|
||||
|
|
|
@ -525,11 +525,11 @@ CallInst *IRBuilderBase::CreateMaskedGather(Value *Ptrs, Align Alignment,
|
|||
auto PtrsTy = cast<VectorType>(Ptrs->getType());
|
||||
auto PtrTy = cast<PointerType>(PtrsTy->getElementType());
|
||||
unsigned NumElts = PtrsTy->getNumElements();
|
||||
Type *DataTy = VectorType::get(PtrTy->getElementType(), NumElts);
|
||||
auto *DataTy = FixedVectorType::get(PtrTy->getElementType(), NumElts);
|
||||
|
||||
if (!Mask)
|
||||
Mask = Constant::getAllOnesValue(VectorType::get(Type::getInt1Ty(Context),
|
||||
NumElts));
|
||||
Mask = Constant::getAllOnesValue(
|
||||
FixedVectorType::get(Type::getInt1Ty(Context), NumElts));
|
||||
|
||||
if (!PassThru)
|
||||
PassThru = UndefValue::get(DataTy);
|
||||
|
@ -564,8 +564,8 @@ CallInst *IRBuilderBase::CreateMaskedScatter(Value *Data, Value *Ptrs,
|
|||
#endif
|
||||
|
||||
if (!Mask)
|
||||
Mask = Constant::getAllOnesValue(VectorType::get(Type::getInt1Ty(Context),
|
||||
NumElts));
|
||||
Mask = Constant::getAllOnesValue(
|
||||
FixedVectorType::get(Type::getInt1Ty(Context), NumElts));
|
||||
|
||||
Type *OverloadedTypes[] = {DataTy, PtrsTy};
|
||||
Value *Ops[] = {Data, Ptrs, getInt32(Alignment.value()), Mask};
|
||||
|
@ -994,12 +994,13 @@ Value *IRBuilderBase::CreateVectorSplat(unsigned NumElts, Value *V,
|
|||
|
||||
// First insert it into an undef vector so we can shuffle it.
|
||||
Type *I32Ty = getInt32Ty();
|
||||
Value *Undef = UndefValue::get(VectorType::get(V->getType(), NumElts));
|
||||
Value *Undef = UndefValue::get(FixedVectorType::get(V->getType(), NumElts));
|
||||
V = CreateInsertElement(Undef, V, ConstantInt::get(I32Ty, 0),
|
||||
Name + ".splatinsert");
|
||||
|
||||
// Shuffle the value across the desired number of elements.
|
||||
Value *Zeros = ConstantAggregateZero::get(VectorType::get(I32Ty, NumElts));
|
||||
Value *Zeros =
|
||||
ConstantAggregateZero::get(FixedVectorType::get(I32Ty, NumElts));
|
||||
return CreateShuffleVector(V, Undef, Zeros, Name + ".splat");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue