diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp @@ -255,7 +255,7 @@ if (T->isIntegerTy()) return B.getInt32Ty(); - return VectorType::get(B.getInt32Ty(), cast(T)->getNumElements()); + return FixedVectorType::get(B.getInt32Ty(), cast(T)); } bool AMDGPUCodeGenPrepare::isSigned(const BinaryOperator &I) const { @@ -477,7 +477,7 @@ static void extractValues(IRBuilder<> &Builder, SmallVectorImpl &Values, Value *V) { - VectorType *VT = dyn_cast(V->getType()); + auto *VT = dyn_cast(V->getType()); if (!VT) { Values.push_back(V); return; @@ -777,7 +777,7 @@ Value *Den = FDiv.getOperand(1); Value *NewFDiv = nullptr; - if (VectorType *VT = dyn_cast(FDiv.getType())) { + if (auto *VT = dyn_cast(FDiv.getType())) { NewFDiv = UndefValue::get(VT); // FIXME: Doesn't do the right thing for cases where the vector is partially @@ -1233,7 +1233,7 @@ IRBuilder<> Builder(&I); Builder.SetCurrentDebugLocation(I.getDebugLoc()); - if (VectorType *VT = dyn_cast(Ty)) { + if (auto *VT = dyn_cast(Ty)) { NewDiv = UndefValue::get(VT); for (unsigned N = 0, E = VT->getNumElements(); N != E; ++N) { diff --git a/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp b/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp @@ -186,7 +186,7 @@ case Type::DoubleTyID: return "double"; case Type::FixedVectorTyID: { - auto VecTy = cast(Ty); + auto VecTy = cast(Ty); auto ElTy = VecTy->getElementType(); auto NumElements = VecTy->getNumElements(); return (Twine(getTypeName(ElTy, Signed)) + Twine(NumElements)).str(); @@ -633,7 +633,7 @@ case Type::DoubleTyID: return "double"; case Type::FixedVectorTyID: { - auto VecTy = cast(Ty); + auto VecTy = cast(Ty); auto ElTy = VecTy->getElementType(); auto NumElements = VecTy->getNumElements(); return (Twine(getTypeName(ElTy, Signed)) + Twine(NumElements)).str(); diff --git a/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp b/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp @@ -1126,8 +1126,8 @@ Type* rTy = opr0->getType(); Type* nTyS = eltType->isDoubleTy() ? B.getInt64Ty() : B.getInt32Ty(); Type *nTy = nTyS; - if (const VectorType *vTy = dyn_cast(rTy)) - nTy = VectorType::get(nTyS, vTy->getNumElements()); + if (const auto *vTy = dyn_cast(rTy)) + nTy = FixedVectorType::get(nTyS, vTy); unsigned size = nTy->getScalarSizeInBits(); opr_n = CI->getArgOperand(1); if (opr_n->getType()->isIntegerTy()) diff --git a/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp b/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULowerKernelArguments.cpp @@ -135,7 +135,7 @@ continue; } - VectorType *VT = dyn_cast(ArgTy); + auto *VT = dyn_cast(ArgTy); bool IsV3 = VT && VT->getNumElements() == 3; bool DoShiftOpt = Size < 32 && !ArgTy->isAggregateType(); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp @@ -218,10 +218,10 @@ // if (ArgSize % DWORD_ALIGN != 0) { llvm::Type *ResType = llvm::Type::getInt32Ty(Ctx); - VectorType *LLVMVecType = llvm::dyn_cast(ArgType); + auto *LLVMVecType = llvm::dyn_cast(ArgType); int NumElem = LLVMVecType ? LLVMVecType->getNumElements() : 1; if (LLVMVecType && NumElem > 1) - ResType = llvm::VectorType::get(ResType, NumElem); + ResType = llvm::FixedVectorType::get(ResType, NumElem); Builder.SetInsertPoint(CI); Builder.SetCurrentDebugLocation(CI->getDebugLoc()); if (OpConvSpecifiers[ArgCount - 1] == 'x' || @@ -479,7 +479,7 @@ } } else if (isa(ArgType)) { Type *IType = NULL; - uint32_t EleCount = cast(ArgType)->getNumElements(); + uint32_t EleCount = cast(ArgType)->getNumElements(); uint32_t EleSize = ArgType->getScalarSizeInBits(); uint32_t TotalSize = EleCount * EleSize; if (EleCount == 3) { diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp @@ -297,9 +297,9 @@ return CI; } -static VectorType *arrayTypeToVecType(ArrayType *ArrayTy) { - return VectorType::get(ArrayTy->getElementType(), - ArrayTy->getNumElements()); +static FixedVectorType *arrayTypeToVecType(ArrayType *ArrayTy) { + return FixedVectorType::get(ArrayTy->getElementType(), + ArrayTy->getNumElements()); } static Value *stripBitcasts(Value *V) { @@ -390,7 +390,7 @@ } Type *AllocaTy = Alloca->getAllocatedType(); - VectorType *VectorTy = dyn_cast(AllocaTy); + auto *VectorTy = dyn_cast(AllocaTy); if (auto *ArrayTy = dyn_cast(AllocaTy)) { if (VectorType::isValidElementType(ArrayTy->getElementType()) && ArrayTy->getNumElements() > 0) diff --git a/llvm/lib/Target/AMDGPU/AMDGPURewriteOutArguments.cpp b/llvm/lib/Target/AMDGPU/AMDGPURewriteOutArguments.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPURewriteOutArguments.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPURewriteOutArguments.cpp @@ -208,8 +208,8 @@ #ifndef NDEBUG bool AMDGPURewriteOutArguments::isVec3ToVec4Shuffle(Type *Ty0, Type* Ty1) const { - VectorType *VT0 = dyn_cast(Ty0); - VectorType *VT1 = dyn_cast(Ty1); + auto *VT0 = dyn_cast(Ty0); + auto *VT1 = dyn_cast(Ty1); if (!VT0 || !VT1) return false; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp @@ -909,7 +909,7 @@ unsigned GCNTTIImpl::getShuffleCost(TTI::ShuffleKind Kind, VectorType *VT, int Index, VectorType *SubTp) { if (ST->hasVOP3PInsts()) { - if (VT->getNumElements() == 2 && + if (cast(VT)->getNumElements() == 2 && DL.getTypeSizeInBits(VT->getElementType()) == 16) { // With op_sel VOP3P instructions freely can access the low half or high // half of a register, so any swizzle is free. diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -899,9 +899,8 @@ static EVT memVTFromImageData(Type *Ty, unsigned DMaskLanes) { assert(DMaskLanes != 0); - if (auto *VT = dyn_cast(Ty)) { - unsigned NumElts = std::min(DMaskLanes, - static_cast(VT->getNumElements())); + if (auto *VT = dyn_cast(Ty)) { + unsigned NumElts = std::min(DMaskLanes, VT->getNumElements()); return EVT::getVectorVT(Ty->getContext(), EVT::getEVT(VT->getElementType()), NumElts); diff --git a/llvm/lib/Target/ARM/ARMISelLowering.h b/llvm/lib/Target/ARM/ARMISelLowering.h --- a/llvm/lib/Target/ARM/ARMISelLowering.h +++ b/llvm/lib/Target/ARM/ARMISelLowering.h @@ -640,7 +640,7 @@ /// Returns true if \p VecTy is a legal interleaved access type. This /// function checks the vector element type and the overall width of the /// vector. - bool isLegalInterleavedAccessType(unsigned Factor, VectorType *VecTy, + bool isLegalInterleavedAccessType(unsigned Factor, FixedVectorType *VecTy, const DataLayout &DL) const; bool alignLoopsWithOptSize() const override; diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -17791,7 +17791,7 @@ } bool ARMTargetLowering::isLegalInterleavedAccessType( - unsigned Factor, VectorType *VecTy, const DataLayout &DL) const { + unsigned Factor, FixedVectorType *VecTy, const DataLayout &DL) const { unsigned VecSize = DL.getTypeSizeInBits(VecTy); unsigned ElSize = DL.getTypeSizeInBits(VecTy->getElementType()); @@ -17850,7 +17850,7 @@ assert(Shuffles.size() == Indices.size() && "Unmatched number of shufflevectors and indices"); - VectorType *VecTy = Shuffles[0]->getType(); + auto *VecTy = cast(Shuffles[0]->getType()); Type *EltTy = VecTy->getElementType(); const DataLayout &DL = LI->getModule()->getDataLayout(); @@ -17866,7 +17866,7 @@ // A pointer vector can not be the return type of the ldN intrinsics. Need to // load integer vectors first and then convert to pointer vectors. if (EltTy->isPointerTy()) - VecTy = VectorType::get(DL.getIntPtrType(EltTy), VecTy->getNumElements()); + VecTy = FixedVectorType::get(DL.getIntPtrType(EltTy), VecTy); IRBuilder<> Builder(LI); @@ -17876,8 +17876,8 @@ if (NumLoads > 1) { // If we're going to generate more than one load, reset the sub-vector type // to something legal. - VecTy = VectorType::get(VecTy->getElementType(), - VecTy->getNumElements() / NumLoads); + VecTy = FixedVectorType::get(VecTy->getElementType(), + VecTy->getNumElements() / NumLoads); // We will compute the pointer operand of each load from the original base // address using GEPs. Cast the base address to a pointer to the scalar @@ -17946,8 +17946,8 @@ // Convert the integer vector to pointer vector if the element is pointer. if (EltTy->isPointerTy()) SubVec = Builder.CreateIntToPtr( - SubVec, VectorType::get(SV->getType()->getElementType(), - VecTy->getNumElements())); + SubVec, + FixedVectorType::get(SV->getType()->getElementType(), VecTy)); SubVecs[SV].push_back(SubVec); } @@ -17999,12 +17999,12 @@ assert(Factor >= 2 && Factor <= getMaxSupportedInterleaveFactor() && "Invalid interleave factor"); - VectorType *VecTy = SVI->getType(); + auto *VecTy = cast(SVI->getType()); assert(VecTy->getNumElements() % Factor == 0 && "Invalid interleaved store"); unsigned LaneLen = VecTy->getNumElements() / Factor; Type *EltTy = VecTy->getElementType(); - VectorType *SubVecTy = VectorType::get(EltTy, LaneLen); + auto *SubVecTy = FixedVectorType::get(EltTy, LaneLen); const DataLayout &DL = SI->getModule()->getDataLayout(); @@ -18026,12 +18026,12 @@ Type *IntTy = DL.getIntPtrType(EltTy); // Convert to the corresponding integer vector. - Type *IntVecTy = VectorType::get( - IntTy, cast(Op0->getType())->getNumElements()); + auto *IntVecTy = + FixedVectorType::get(IntTy, cast(Op0->getType())); Op0 = Builder.CreatePtrToInt(Op0, IntVecTy); Op1 = Builder.CreatePtrToInt(Op1, IntVecTy); - SubVecTy = VectorType::get(IntTy, LaneLen); + SubVecTy = FixedVectorType::get(IntTy, LaneLen); } // The base address of the store. @@ -18041,7 +18041,7 @@ // If we're going to generate more than one store, reset the lane length // and sub-vector type to something legal. LaneLen /= NumStores; - SubVecTy = VectorType::get(SubVecTy->getElementType(), LaneLen); + SubVecTy = FixedVectorType::get(SubVecTy->getElementType(), LaneLen); // We will compute the pointer operand of each store from the original base // address using GEPs. Cast the base address to a pointer to the scalar diff --git a/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp b/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp --- a/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp +++ b/llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp @@ -490,7 +490,7 @@ // result anyway. return std::max(BaseT::getVectorInstrCost(Opcode, ValTy, Index), ST->getMVEVectorCostFactor()) * - cast(ValTy)->getNumElements() / 2; + cast(ValTy)->getNumElements() / 2; } return BaseT::getVectorInstrCost(Opcode, ValTy, Index); @@ -554,7 +554,7 @@ if (!EnableMaskedLoadStores || !ST->hasMVEIntegerOps()) return false; - if (auto *VecTy = dyn_cast(DataTy)) { + if (auto *VecTy = dyn_cast(DataTy)) { // Don't support v2i1 yet. if (VecTy->getNumElements() == 2) return false; @@ -836,7 +836,7 @@ return LT.first * BaseCost; // Else this is expand, assume that we need to scalarize this op. - if (auto *VTy = dyn_cast(Ty)) { + if (auto *VTy = dyn_cast(Ty)) { unsigned Num = VTy->getNumElements(); unsigned Cost = getArithmeticInstrCost(Opcode, Ty->getScalarType(), CostKind); @@ -880,8 +880,9 @@ if (Factor <= TLI->getMaxSupportedInterleaveFactor() && !EltIs64Bits && !UseMaskForCond && !UseMaskForGaps) { - unsigned NumElts = cast(VecTy)->getNumElements(); - auto *SubVecTy = VectorType::get(VecTy->getScalarType(), NumElts / Factor); + unsigned NumElts = cast(VecTy)->getNumElements(); + auto *SubVecTy = + FixedVectorType::get(VecTy->getScalarType(), NumElts / Factor); // vldN/vstN only support legal vector types of size 64 or 128 in bits. // Accesses having vector types that are a multiple of 128 bits can be @@ -917,7 +918,7 @@ Alignment, CostKind, I); assert(DataTy->isVectorTy() && "Can't do gather/scatters on scalar!"); - VectorType *VTy = cast(DataTy); + auto *VTy = cast(DataTy); // TODO: Splitting, once we do that. @@ -1458,7 +1459,8 @@ case Instruction::ICmp: case Instruction::Add: return ScalarBits < 64 && - (ScalarBits * cast(Ty)->getNumElements()) % 128 == 0; + (ScalarBits * cast(Ty)->getNumElements()) % 128 == + 0; default: llvm_unreachable("Unhandled reduction opcode"); } diff --git a/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp b/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp --- a/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp +++ b/llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp @@ -183,8 +183,8 @@ } Offsets = GEP->getOperand(1); // Paranoid check whether the number of parallel lanes is the same - assert(cast(Ty)->getNumElements() == - cast(Offsets->getType())->getNumElements()); + assert(cast(Ty)->getNumElements() == + cast(Offsets->getType())->getNumElements()); // Only offsets can be integrated into an arm gather, any smaller // type would have to be sign extended by the gep - and arm gathers can only // zero extend. Additionally, the offsets do have to originate from a zext of @@ -194,7 +194,7 @@ return nullptr; if (ZExtInst *ZextOffs = dyn_cast(Offsets)) Offsets = ZextOffs->getOperand(0); - else if (!(cast(Offsets->getType())->getNumElements() == 4 && + else if (!(cast(Offsets->getType())->getNumElements() == 4 && Offsets->getType()->getScalarSizeInBits() == 32)) return nullptr; @@ -217,8 +217,8 @@ void MVEGatherScatterLowering::lookThroughBitcast(Value *&Ptr) { // Look through bitcast instruction if #elements is the same if (auto *BitCast = dyn_cast(Ptr)) { - auto *BCTy = cast(BitCast->getType()); - auto *BCSrcTy = cast(BitCast->getOperand(0)->getType()); + auto *BCTy = cast(BitCast->getType()); + auto *BCSrcTy = cast(BitCast->getOperand(0)->getType()); if (BCTy->getNumElements() == BCSrcTy->getNumElements()) { LLVM_DEBUG( dbgs() << "masked gathers/scatters: looking through bitcast\n"); @@ -299,7 +299,7 @@ // @llvm.masked.gather.*(Ptrs, alignment, Mask, Src0) // Attempt to turn the masked gather in I into a MVE intrinsic // Potentially optimising the addressing modes as we do so. - auto *Ty = cast(I->getType()); + auto *Ty = cast(I->getType()); Value *Ptr = I->getArgOperand(0); unsigned Alignment = cast(I->getArgOperand(1))->getZExtValue(); Value *Mask = I->getArgOperand(2); @@ -344,7 +344,7 @@ IRBuilder<> &Builder, unsigned Increment) { using namespace PatternMatch; - auto *Ty = cast(I->getType()); + auto *Ty = cast(I->getType()); LLVM_DEBUG(dbgs() << "masked gathers: loading from vector of pointers\n"); if (Ty->getNumElements() != 4 || Ty->getScalarSizeInBits() != 32) // Can't build an intrinsic for this @@ -364,7 +364,7 @@ Value *MVEGatherScatterLowering::tryCreateMaskedGatherBaseWB( IntrinsicInst *I, Value *Ptr, IRBuilder<> &Builder, unsigned Increment) { using namespace PatternMatch; - auto *Ty = cast(I->getType()); + auto *Ty = cast(I->getType()); LLVM_DEBUG( dbgs() << "masked gathers: loading from vector of pointers with writeback\n"); @@ -456,7 +456,7 @@ Value *MVEGatherScatterLowering::tryCreateIncrementingGather( IntrinsicInst *I, Value *BasePtr, Value *Offsets, GetElementPtrInst *GEP, IRBuilder<> &Builder) { - auto *Ty = cast(I->getType()); + auto *Ty = cast(I->getType()); // Incrementing gathers only exist for v4i32 if (Ty->getNumElements() != 4 || Ty->getScalarSizeInBits() != 32) return nullptr; @@ -473,7 +473,7 @@ int TypeScale = computeScale(DT.getTypeSizeInBits(GEP->getOperand(0)->getType()), DT.getTypeSizeInBits(GEP->getType()) / - cast(GEP->getType())->getNumElements()); + cast(GEP->getType())->getNumElements()); if (TypeScale == -1) return nullptr; @@ -548,7 +548,7 @@ Builder.SetInsertPoint(&Phi->getIncomingBlock(1 - IncrementIndex)->back()); unsigned NumElems = - cast(OffsetsIncoming->getType())->getNumElements(); + cast(OffsetsIncoming->getType())->getNumElements(); // Make sure the offsets are scaled correctly Instruction *ScaledOffsets = BinaryOperator::Create( @@ -599,7 +599,7 @@ Value *Input = I->getArgOperand(0); Value *Ptr = I->getArgOperand(1); unsigned Alignment = cast(I->getArgOperand(2))->getZExtValue(); - auto *Ty = cast(Input->getType()); + auto *Ty = cast(Input->getType()); if (!isLegalTypeAndAlignment(Ty->getNumElements(), Ty->getScalarSizeInBits(), Alignment)) @@ -629,7 +629,7 @@ using namespace PatternMatch; Value *Input = I->getArgOperand(0); Value *Mask = I->getArgOperand(3); - auto *Ty = cast(Input->getType()); + auto *Ty = cast(Input->getType()); // Only QR variants allow truncating if (!(Ty->getNumElements() == 4 && Ty->getScalarSizeInBits() == 32)) { // Can't build an intrinsic for this diff --git a/llvm/lib/Target/ARM/MVETailPredication.cpp b/llvm/lib/Target/ARM/MVETailPredication.cpp --- a/llvm/lib/Target/ARM/MVETailPredication.cpp +++ b/llvm/lib/Target/ARM/MVETailPredication.cpp @@ -84,11 +84,11 @@ Value *NumElements = nullptr; // Other instructions in the icmp chain that calculate the predicate. - VectorType *VecTy = nullptr; + FixedVectorType *VecTy = nullptr; Instruction *Shuffle = nullptr; Instruction *Induction = nullptr; - TripCountPattern(Instruction *P, Value *TC, VectorType *VT) + TripCountPattern(Instruction *P, Value *TC, FixedVectorType *VT) : Predicate(P), TripCount(TC), VecTy(VT){}; }; @@ -323,7 +323,7 @@ return false; Value *InLoop = Phi->getIncomingValueForBlock(L->getLoopLatch()); - unsigned Lanes = cast(Insert->getType())->getNumElements(); + unsigned Lanes = cast(Insert->getType())->getNumElements(); Instruction *LHS = nullptr; if (!match(InLoop, m_Add(m_Instruction(LHS), m_SpecificInt(Lanes)))) @@ -332,10 +332,10 @@ return LHS == Phi; } -static VectorType *getVectorType(IntrinsicInst *I) { +static FixedVectorType *getVectorType(IntrinsicInst *I) { unsigned TypeOp = I->getIntrinsicID() == Intrinsic::masked_load ? 0 : 1; auto *PtrTy = cast(I->getOperand(TypeOp)->getType()); - return cast(PtrTy->getElementType()); + return cast(PtrTy->getElementType()); } bool MVETailPredication::IsPredicatedVectorLoop() { @@ -345,7 +345,7 @@ for (auto *BB : L->getBlocks()) { for (auto &I : *BB) { if (IsMasked(&I)) { - VectorType *VecTy = getVectorType(cast(&I)); + auto *VecTy = getVectorType(cast(&I)); unsigned Lanes = VecTy->getNumElements(); unsigned ElementWidth = VecTy->getScalarSizeInBits(); // MVE vectors are 128-bit, but don't support 128 x i1.