diff --git a/llvm/include/llvm/IR/GetElementPtrTypeIterator.h b/llvm/include/llvm/IR/GetElementPtrTypeIterator.h --- a/llvm/include/llvm/IR/GetElementPtrTypeIterator.h +++ b/llvm/include/llvm/IR/GetElementPtrTypeIterator.h @@ -83,7 +83,7 @@ if (isa(VTy)) NumElements = Unbounded; else - NumElements = VTy->getNumElements(); + NumElements = cast(VTy)->getNumElements(); } else CurTy = dyn_cast(Ty); ++OpIt; diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h --- a/llvm/include/llvm/IR/Instructions.h +++ b/llvm/include/llvm/IR/Instructions.h @@ -2046,7 +2046,7 @@ /// Example: shufflevector <2 x n> A, <2 x n> B, <1,2,3> bool increasesLength() const { unsigned NumSourceElts = - cast(Op<0>()->getType())->getNumElements(); + cast(Op<0>()->getType())->getNumElements(); unsigned NumMaskElts = ShuffleMask.size(); return NumSourceElts < NumMaskElts; } @@ -2239,7 +2239,8 @@ /// Return true if this shuffle mask is an extract subvector mask. bool isExtractSubvectorMask(int &Index) const { - int NumSrcElts = cast(Op<0>()->getType())->getNumElements(); + int NumSrcElts = + cast(Op<0>()->getType())->getNumElements(); return isExtractSubvectorMask(ShuffleMask, NumSrcElts, Index); } diff --git a/llvm/include/llvm/IR/MatrixBuilder.h b/llvm/include/llvm/IR/MatrixBuilder.h --- a/llvm/include/llvm/IR/MatrixBuilder.h +++ b/llvm/include/llvm/IR/MatrixBuilder.h @@ -40,11 +40,11 @@ "One of the operands must be a matrix (embedded in a vector)"); if (LHS->getType()->isVectorTy() && !RHS->getType()->isVectorTy()) RHS = B.CreateVectorSplat( - cast(LHS->getType())->getNumElements(), RHS, + cast(LHS->getType())->getNumElements(), RHS, "scalar.splat"); else if (!LHS->getType()->isVectorTy() && RHS->getType()->isVectorTy()) LHS = B.CreateVectorSplat( - cast(RHS->getType())->getNumElements(), LHS, + cast(RHS->getType())->getNumElements(), LHS, "scalar.splat"); return {LHS, RHS}; } @@ -157,11 +157,11 @@ assert(LHS->getType()->isVectorTy() || RHS->getType()->isVectorTy()); if (LHS->getType()->isVectorTy() && !RHS->getType()->isVectorTy()) RHS = B.CreateVectorSplat( - cast(LHS->getType())->getNumElements(), RHS, + cast(LHS->getType())->getNumElements(), RHS, "scalar.splat"); else if (!LHS->getType()->isVectorTy() && RHS->getType()->isVectorTy()) LHS = B.CreateVectorSplat( - cast(RHS->getType())->getNumElements(), LHS, + cast(RHS->getType())->getNumElements(), LHS, "scalar.splat"); return cast(LHS->getType()) @@ -177,11 +177,11 @@ assert(LHS->getType()->isVectorTy() || RHS->getType()->isVectorTy()); if (LHS->getType()->isVectorTy() && !RHS->getType()->isVectorTy()) RHS = B.CreateVectorSplat( - cast(LHS->getType())->getNumElements(), RHS, + cast(LHS->getType())->getNumElements(), RHS, "scalar.splat"); else if (!LHS->getType()->isVectorTy() && RHS->getType()->isVectorTy()) LHS = B.CreateVectorSplat( - cast(RHS->getType())->getNumElements(), LHS, + cast(RHS->getType())->getNumElements(), LHS, "scalar.splat"); return cast(LHS->getType()) diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp --- a/llvm/lib/IR/AsmWriter.cpp +++ b/llvm/lib/IR/AsmWriter.cpp @@ -1511,7 +1511,7 @@ } if (isa(CV) || isa(CV)) { - auto *CVVTy = cast(CV->getType()); + auto *CVVTy = cast(CV->getType()); Type *ETy = CVVTy->getElementType(); Out << '<'; TypePrinter.print(ETy, Out); diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -900,7 +900,7 @@ // to byte shuffles. static Value *UpgradeX86PSLLDQIntrinsics(IRBuilder<> &Builder, Value *Op, unsigned Shift) { - auto *ResultTy = cast(Op->getType()); + auto *ResultTy = cast(Op->getType()); unsigned NumElts = ResultTy->getNumElements() * 8; // Bitcast from a 64-bit element type to a byte element type. @@ -934,7 +934,7 @@ // to byte shuffles. static Value *UpgradeX86PSRLDQIntrinsics(IRBuilder<> &Builder, Value *Op, unsigned Shift) { - auto *ResultTy = cast(Op->getType()); + auto *ResultTy = cast(Op->getType()); unsigned NumElts = ResultTy->getNumElements() * 8; // Bitcast from a 64-bit element type to a byte element type. @@ -992,7 +992,7 @@ return Op0; Mask = getX86MaskVec(Builder, Mask, - cast(Op0->getType())->getNumElements()); + cast(Op0->getType())->getNumElements()); return Builder.CreateSelect(Mask, Op0, Op1); } @@ -1019,7 +1019,7 @@ bool IsVALIGN) { unsigned ShiftVal = cast(Shift)->getZExtValue(); - unsigned NumElts = cast(Op0->getType())->getNumElements(); + unsigned NumElts = cast(Op0->getType())->getNumElements(); assert((IsVALIGN || NumElts % 16 == 0) && "Illegal NumElts for PALIGNR!"); assert((!IsVALIGN || NumElts <= 16) && "NumElts too large for VALIGN!"); assert(isPowerOf2_32(NumElts) && "NumElts not a power of 2!"); @@ -1150,7 +1150,7 @@ // Funnel shifts amounts are treated as modulo and types are all power-of-2 so // we only care about the lowest log2 bits anyway. if (Amt->getType() != Ty) { - unsigned NumElts = cast(Ty)->getNumElements(); + unsigned NumElts = cast(Ty)->getNumElements(); Amt = Builder.CreateIntCast(Amt, Ty->getScalarType(), false); Amt = Builder.CreateVectorSplat(NumElts, Amt); } @@ -1220,7 +1220,7 @@ // Funnel shifts amounts are treated as modulo and types are all power-of-2 so // we only care about the lowest log2 bits anyway. if (Amt->getType() != Ty) { - unsigned NumElts = cast(Ty)->getNumElements(); + unsigned NumElts = cast(Ty)->getNumElements(); Amt = Builder.CreateIntCast(Amt, Ty->getScalarType(), false); Amt = Builder.CreateVectorSplat(NumElts, Amt); } @@ -1257,7 +1257,7 @@ return Builder.CreateAlignedStore(Data, Ptr, Alignment); // Convert the mask from an integer type to a vector of i1. - unsigned NumElts = cast(Data->getType())->getNumElements(); + unsigned NumElts = cast(Data->getType())->getNumElements(); Mask = getX86MaskVec(Builder, Mask, NumElts); return Builder.CreateMaskedStore(Data, Ptr, Alignment, Mask); } @@ -1280,7 +1280,8 @@ return Builder.CreateAlignedLoad(ValTy, Ptr, Alignment); // Convert the mask from an integer type to a vector of i1. - unsigned NumElts = cast(Passthru->getType())->getNumElements(); + unsigned NumElts = + cast(Passthru->getType())->getNumElements(); Mask = getX86MaskVec(Builder, Mask, NumElts); return Builder.CreateMaskedLoad(Ptr, Alignment, Mask, Passthru); } @@ -1344,7 +1345,7 @@ // Applying mask on vector of i1's and make sure result is at least 8 bits wide. static Value *ApplyX86MaskOn1BitsVec(IRBuilder<> &Builder, Value *Vec, Value *Mask) { - unsigned NumElts = cast(Vec->getType())->getNumElements(); + unsigned NumElts = cast(Vec->getType())->getNumElements(); if (Mask) { const auto *C = dyn_cast(Mask); if (!C || !C->isAllOnesValue()) @@ -1367,7 +1368,7 @@ static Value *upgradeMaskedCompare(IRBuilder<> &Builder, CallInst &CI, unsigned CC, bool Signed) { Value *Op0 = CI.getArgOperand(0); - unsigned NumElts = cast(Op0->getType())->getNumElements(); + unsigned NumElts = cast(Op0->getType())->getNumElements(); Value *Cmp; if (CC == 3) { @@ -1422,7 +1423,7 @@ static Value* UpgradeMaskToInt(IRBuilder<> &Builder, CallInst &CI) { Value* Op = CI.getArgOperand(0); Type* ReturnOp = CI.getType(); - unsigned NumElts = cast(CI.getType())->getNumElements(); + unsigned NumElts = cast(CI.getType())->getNumElements(); Value *Mask = getX86MaskVec(Builder, Op, NumElts); return Builder.CreateSExt(Mask, ReturnOp, "vpmovm2"); } @@ -1871,8 +1872,8 @@ Rep = Builder.CreateICmp(Pred, Rep, Zero); Rep = ApplyX86MaskOn1BitsVec(Builder, Rep, Mask); } else if (IsX86 && (Name.startswith("avx512.mask.pbroadcast"))){ - unsigned NumElts = - cast(CI->getArgOperand(1)->getType())->getNumElements(); + unsigned NumElts = cast(CI->getArgOperand(1)->getType()) + ->getNumElements(); Rep = Builder.CreateVectorSplat(NumElts, CI->getArgOperand(0)); Rep = EmitX86Select(Builder, CI->getArgOperand(2), Rep, CI->getArgOperand(1)); @@ -2122,9 +2123,9 @@ Name == "avx.cvt.ps2.pd.256" || Name == "avx512.mask.cvtps2pd.128" || Name == "avx512.mask.cvtps2pd.256")) { - auto *DstTy = cast(CI->getType()); + auto *DstTy = cast(CI->getType()); Rep = CI->getArgOperand(0); - auto *SrcTy = cast(Rep->getType()); + auto *SrcTy = cast(Rep->getType()); unsigned NumDstElts = DstTy->getNumElements(); if (NumDstElts < SrcTy->getNumElements()) { @@ -2154,9 +2155,9 @@ CI->getArgOperand(1)); } else if (IsX86 && (Name.startswith("avx512.mask.vcvtph2ps.") || Name.startswith("vcvtph2ps."))) { - auto *DstTy = cast(CI->getType()); + auto *DstTy = cast(CI->getType()); Rep = CI->getArgOperand(0); - auto *SrcTy = cast(Rep->getType()); + auto *SrcTy = cast(Rep->getType()); unsigned NumDstElts = DstTy->getNumElements(); if (NumDstElts != SrcTy->getNumElements()) { assert(NumDstElts == 4 && "Unexpected vector size"); @@ -2177,7 +2178,7 @@ CI->getArgOperand(1),CI->getArgOperand(2), /*Aligned*/true); } else if (IsX86 && Name.startswith("avx512.mask.expand.load.")) { - auto *ResultTy = cast(CI->getType()); + auto *ResultTy = cast(CI->getType()); Type *PtrTy = ResultTy->getElementType(); // Cast the pointer to element type. @@ -2199,8 +2200,9 @@ Value *Ptr = Builder.CreateBitCast(CI->getOperand(0), llvm::PointerType::getUnqual(PtrTy)); - Value *MaskVec = getX86MaskVec(Builder, CI->getArgOperand(2), - ResultTy->getNumElements()); + Value *MaskVec = + getX86MaskVec(Builder, CI->getArgOperand(2), + cast(ResultTy)->getNumElements()); Function *CSt = Intrinsic::getDeclaration(F->getParent(), Intrinsic::masked_compressstore, @@ -2208,7 +2210,7 @@ Rep = Builder.CreateCall(CSt, { CI->getArgOperand(1), Ptr, MaskVec }); } else if (IsX86 && (Name.startswith("avx512.mask.compress.") || Name.startswith("avx512.mask.expand."))) { - auto *ResultTy = cast(CI->getType()); + auto *ResultTy = cast(CI->getType()); Value *MaskVec = getX86MaskVec(Builder, CI->getArgOperand(2), ResultTy->getNumElements()); @@ -2288,7 +2290,7 @@ } else if (IsX86 && (Name.startswith("avx.vbroadcast.s") || Name.startswith("avx512.vbroadcast.s"))) { // Replace broadcasts with a series of insertelements. - auto *VecTy = cast(CI->getType()); + auto *VecTy = cast(CI->getType()); Type *EltTy = VecTy->getElementType(); unsigned EltNum = VecTy->getNumElements(); Value *Cast = Builder.CreateBitCast(CI->getArgOperand(0), @@ -2305,8 +2307,8 @@ Name.startswith("avx2.pmovzx") || Name.startswith("avx512.mask.pmovsx") || Name.startswith("avx512.mask.pmovzx"))) { - VectorType *SrcTy = cast(CI->getArgOperand(0)->getType()); - VectorType *DstTy = cast(CI->getType()); + auto *SrcTy = cast(CI->getArgOperand(0)->getType()); + auto *DstTy = cast(CI->getType()); unsigned NumDstElts = DstTy->getNumElements(); // Extract a subvector of the first NumDstElts lanes and sign/zero extend. @@ -2373,8 +2375,10 @@ }else if (IsX86 && (Name.startswith("avx512.mask.broadcastf") || Name.startswith("avx512.mask.broadcasti"))) { unsigned NumSrcElts = - cast(CI->getArgOperand(0)->getType())->getNumElements(); - unsigned NumDstElts = cast(CI->getType())->getNumElements(); + cast(CI->getArgOperand(0)->getType()) + ->getNumElements(); + unsigned NumDstElts = + cast(CI->getType())->getNumElements(); SmallVector ShuffleMask(NumDstElts); for (unsigned i = 0; i != NumDstElts; ++i) @@ -2463,7 +2467,7 @@ Value *Op0 = CI->getArgOperand(0); Value *Op1 = CI->getArgOperand(1); unsigned Imm = cast (CI->getArgOperand(2))->getZExtValue(); - VectorType *VecTy = cast(CI->getType()); + auto *VecTy = cast(CI->getType()); unsigned NumElts = VecTy->getNumElements(); SmallVector Idxs(NumElts); @@ -2477,8 +2481,10 @@ Value *Op0 = CI->getArgOperand(0); Value *Op1 = CI->getArgOperand(1); unsigned Imm = cast(CI->getArgOperand(2))->getZExtValue(); - unsigned DstNumElts = cast(CI->getType())->getNumElements(); - unsigned SrcNumElts = cast(Op1->getType())->getNumElements(); + unsigned DstNumElts = + cast(CI->getType())->getNumElements(); + unsigned SrcNumElts = + cast(Op1->getType())->getNumElements(); unsigned Scale = DstNumElts / SrcNumElts; // Mask off the high bits of the immediate value; hardware ignores those. @@ -2521,8 +2527,10 @@ Name.startswith("avx512.mask.vextract"))) { Value *Op0 = CI->getArgOperand(0); unsigned Imm = cast(CI->getArgOperand(1))->getZExtValue(); - unsigned DstNumElts = cast(CI->getType())->getNumElements(); - unsigned SrcNumElts = cast(Op0->getType())->getNumElements(); + unsigned DstNumElts = + cast(CI->getType())->getNumElements(); + unsigned SrcNumElts = + cast(Op0->getType())->getNumElements(); unsigned Scale = SrcNumElts / DstNumElts; // Mask off the high bits of the immediate value; hardware ignores those. @@ -2545,7 +2553,7 @@ Name.startswith("avx512.mask.perm.di."))) { Value *Op0 = CI->getArgOperand(0); unsigned Imm = cast(CI->getArgOperand(1))->getZExtValue(); - VectorType *VecTy = cast(CI->getType()); + auto *VecTy = cast(CI->getType()); unsigned NumElts = VecTy->getNumElements(); SmallVector Idxs(NumElts); @@ -2569,7 +2577,7 @@ uint8_t Imm = cast(CI->getArgOperand(2))->getZExtValue(); - unsigned NumElts = cast(CI->getType())->getNumElements(); + unsigned NumElts = cast(CI->getType())->getNumElements(); unsigned HalfSize = NumElts / 2; SmallVector ShuffleMask(NumElts); @@ -2599,7 +2607,7 @@ Name.startswith("avx512.mask.pshuf.d."))) { Value *Op0 = CI->getArgOperand(0); unsigned Imm = cast(CI->getArgOperand(1))->getZExtValue(); - VectorType *VecTy = cast(CI->getType()); + auto *VecTy = cast(CI->getType()); unsigned NumElts = VecTy->getNumElements(); // Calculate the size of each index in the immediate. unsigned IdxSize = 64 / VecTy->getScalarSizeInBits(); @@ -2621,7 +2629,7 @@ Name.startswith("avx512.mask.pshufl.w."))) { Value *Op0 = CI->getArgOperand(0); unsigned Imm = cast(CI->getArgOperand(1))->getZExtValue(); - unsigned NumElts = cast(CI->getType())->getNumElements(); + unsigned NumElts = cast(CI->getType())->getNumElements(); SmallVector Idxs(NumElts); for (unsigned l = 0; l != NumElts; l += 8) { @@ -2640,7 +2648,7 @@ Name.startswith("avx512.mask.pshufh.w."))) { Value *Op0 = CI->getArgOperand(0); unsigned Imm = cast(CI->getArgOperand(1))->getZExtValue(); - unsigned NumElts = cast(CI->getType())->getNumElements(); + unsigned NumElts = cast(CI->getType())->getNumElements(); SmallVector Idxs(NumElts); for (unsigned l = 0; l != NumElts; l += 8) { @@ -2659,7 +2667,7 @@ Value *Op0 = CI->getArgOperand(0); Value *Op1 = CI->getArgOperand(1); unsigned Imm = cast(CI->getArgOperand(2))->getZExtValue(); - unsigned NumElts = cast(CI->getType())->getNumElements(); + unsigned NumElts = cast(CI->getType())->getNumElements(); unsigned NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); unsigned HalfLaneElts = NumLaneElts / 2; @@ -2684,7 +2692,7 @@ Name.startswith("avx512.mask.movshdup") || Name.startswith("avx512.mask.movsldup"))) { Value *Op0 = CI->getArgOperand(0); - unsigned NumElts = cast(CI->getType())->getNumElements(); + unsigned NumElts = cast(CI->getType())->getNumElements(); unsigned NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); unsigned Offset = 0; @@ -2706,7 +2714,7 @@ Name.startswith("avx512.mask.unpckl."))) { Value *Op0 = CI->getArgOperand(0); Value *Op1 = CI->getArgOperand(1); - int NumElts = cast(CI->getType())->getNumElements(); + int NumElts = cast(CI->getType())->getNumElements(); int NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); SmallVector Idxs(NumElts); @@ -2722,7 +2730,7 @@ Name.startswith("avx512.mask.unpckh."))) { Value *Op0 = CI->getArgOperand(0); Value *Op1 = CI->getArgOperand(1); - int NumElts = cast(CI->getType())->getNumElements(); + int NumElts = cast(CI->getType())->getNumElements(); int NumLaneElts = 128/CI->getType()->getScalarSizeInBits(); SmallVector Idxs(NumElts); @@ -3290,7 +3298,7 @@ Rep = Builder.CreateCall(Intrinsic::getDeclaration(F->getParent(), IID), Ops); } else { - int NumElts = cast(CI->getType())->getNumElements(); + int NumElts = cast(CI->getType())->getNumElements(); Value *Ops[] = { CI->getArgOperand(0), CI->getArgOperand(1), CI->getArgOperand(2) }; diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -161,7 +161,7 @@ // Check that vectors don't contain 1 if (auto *VTy = dyn_cast(this->getType())) { - unsigned NumElts = VTy->getNumElements(); + unsigned NumElts = cast(VTy)->getNumElements(); for (unsigned i = 0; i != NumElts; ++i) { Constant *Elt = this->getAggregateElement(i); if (!Elt || !Elt->isNotOneValue()) @@ -211,7 +211,7 @@ // Check that vectors don't contain INT_MIN if (auto *VTy = dyn_cast(this->getType())) { - unsigned NumElts = VTy->getNumElements(); + unsigned NumElts = cast(VTy)->getNumElements(); for (unsigned i = 0; i != NumElts; ++i) { Constant *Elt = this->getAggregateElement(i); if (!Elt || !Elt->isNotMinSignedValue()) @@ -230,7 +230,8 @@ auto *VTy = dyn_cast(getType()); if (!VTy) return false; - for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + for (unsigned i = 0, e = cast(VTy)->getNumElements(); i != e; + ++i) { auto *CFP = dyn_cast_or_null(this->getAggregateElement(i)); if (!CFP || !CFP->getValueAPF().isFiniteNonZero()) return false; @@ -306,7 +307,8 @@ bool Constant::containsUndefElement() const { if (auto *VTy = dyn_cast(getType())) { - for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) + for (unsigned i = 0, e = cast(VTy)->getNumElements(); + i != e; ++i) if (isa(getAggregateElement(i))) return true; } @@ -316,7 +318,8 @@ bool Constant::containsConstantExpression() const { if (auto *VTy = dyn_cast(getType())) { - for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) + for (unsigned i = 0, e = cast(VTy)->getNumElements(); + i != e; ++i) if (isa(getAggregateElement(i))) return true; } @@ -1029,7 +1032,7 @@ if (auto *AT = dyn_cast(Ty)) return AT->getNumElements(); if (auto *VT = dyn_cast(Ty)) - return VT->getNumElements(); + return cast(VT)->getNumElements(); return Ty->getStructNumElements(); } @@ -1064,7 +1067,7 @@ if (auto *AT = dyn_cast(Ty)) return AT->getNumElements(); if (auto *VT = dyn_cast(Ty)) - return VT->getNumElements(); + return cast(VT)->getNumElements(); return Ty->getStructNumElements(); } @@ -1246,7 +1249,7 @@ ConstantVector::ConstantVector(VectorType *T, ArrayRef V) : ConstantAggregate(T, ConstantVectorVal, V) { - assert(V.size() == T->getNumElements() && + assert(V.size() == cast(T)->getNumElements() && "Invalid initializer for constant vector"); } @@ -2002,8 +2005,8 @@ "PtrToInt destination must be integer or integer vector"); assert(isa(C->getType()) == isa(DstTy)); if (isa(C->getType())) - assert(cast(C->getType())->getNumElements() == - cast(DstTy)->getNumElements() && + assert(cast(C->getType())->getNumElements() == + cast(DstTy)->getNumElements() && "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::PtrToInt, C, DstTy, OnlyIfReduced); } @@ -2016,8 +2019,8 @@ "IntToPtr destination must be a pointer or pointer vector"); assert(isa(C->getType()) == isa(DstTy)); if (isa(C->getType())) - assert(cast(C->getType())->getNumElements() == - cast(DstTy)->getNumElements() && + assert(cast(C->getType())->getNumElements() == + cast(DstTy)->getNumElements() && "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::IntToPtr, C, DstTy, OnlyIfReduced); } @@ -2048,7 +2051,8 @@ Type *MidTy = PointerType::get(DstElemTy, SrcScalarTy->getAddressSpace()); if (VectorType *VT = dyn_cast(DstTy)) { // Handle vectors of pointers. - MidTy = FixedVectorType::get(MidTy, VT->getNumElements()); + MidTy = FixedVectorType::get(MidTy, + cast(VT)->getNumElements()); } C = getBitCast(C, MidTy); } @@ -2690,7 +2694,7 @@ unsigned ConstantDataSequential::getNumElements() const { if (ArrayType *AT = dyn_cast(getType())) return AT->getNumElements(); - return cast(getType())->getNumElements(); + return cast(getType())->getNumElements(); } diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -781,7 +781,7 @@ } unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy) { - return unwrap(VectorTy)->getNumElements(); + return unwrap(VectorTy)->getElementCount().Min; } /*--.. Operations on other types ...........................................--*/ diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -1334,10 +1334,11 @@ // Verify the overloaded type "matches" the Ref type. // i.e. Ty is a vector with the same width as Ref. // Composed of pointers to the same element type as Ref. - VectorType *ReferenceType = dyn_cast(ArgTys[RefArgNumber]); - VectorType *ThisArgVecTy = dyn_cast(Ty); + auto *ReferenceType = dyn_cast(ArgTys[RefArgNumber]); + auto *ThisArgVecTy = dyn_cast(Ty); if (!ThisArgVecTy || !ReferenceType || - (ReferenceType->getNumElements() != ThisArgVecTy->getNumElements())) + (cast(ReferenceType)->getNumElements() != + cast(ThisArgVecTy)->getNumElements())) return true; PointerType *ThisArgEltTy = dyn_cast(ThisArgVecTy->getElementType()); diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp --- a/llvm/lib/IR/IRBuilder.cpp +++ b/llvm/lib/IR/IRBuilder.cpp @@ -522,7 +522,7 @@ CallInst *IRBuilderBase::CreateMaskedGather(Value *Ptrs, Align Alignment, Value *Mask, Value *PassThru, const Twine &Name) { - auto PtrsTy = cast(Ptrs->getType()); + auto PtrsTy = cast(Ptrs->getType()); auto PtrTy = cast(PtrsTy->getElementType()); unsigned NumElts = PtrsTy->getNumElements(); auto *DataTy = FixedVectorType::get(PtrTy->getElementType(), NumElts); @@ -552,8 +552,8 @@ /// be accessed in memory CallInst *IRBuilderBase::CreateMaskedScatter(Value *Data, Value *Ptrs, Align Alignment, Value *Mask) { - auto PtrsTy = cast(Ptrs->getType()); - auto DataTy = cast(Data->getType()); + auto PtrsTy = cast(Ptrs->getType()); + auto DataTy = cast(Data->getType()); unsigned NumElts = PtrsTy->getNumElements(); #ifndef NDEBUG diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -1911,7 +1911,7 @@ } void ShuffleVectorInst::commute() { - int NumOpElts = cast(Op<0>()->getType())->getNumElements(); + int NumOpElts = cast(Op<0>()->getType())->getNumElements(); int NumMaskElts = ShuffleMask.size(); SmallVector NewMask(NumMaskElts); for (int i = 0; i != NumMaskElts; ++i) { @@ -1965,7 +1965,7 @@ return true; if (const auto *MV = dyn_cast(Mask)) { - unsigned V1Size = cast(V1->getType())->getNumElements(); + unsigned V1Size = cast(V1->getType())->getNumElements(); for (Value *Op : MV->operands()) { if (auto *CI = dyn_cast(Op)) { if (CI->uge(V1Size*2)) @@ -1978,8 +1978,9 @@ } if (const auto *CDS = dyn_cast(Mask)) { - unsigned V1Size = cast(V1->getType())->getNumElements(); - for (unsigned i = 0, e = MaskTy->getNumElements(); i != e; ++i) + unsigned V1Size = cast(V1->getType())->getNumElements(); + for (unsigned i = 0, e = cast(MaskTy)->getNumElements(); + i != e; ++i) if (CDS->getElementAsInteger(i) >= V1Size*2) return false; return true; @@ -2177,8 +2178,8 @@ bool ShuffleVectorInst::isIdentityWithPadding() const { if (isa(Op<2>())) return false; - int NumOpElts = cast(Op<0>()->getType())->getNumElements(); - int NumMaskElts = cast(getType())->getNumElements(); + int NumOpElts = cast(Op<0>()->getType())->getNumElements(); + int NumMaskElts = cast(getType())->getNumElements(); if (NumMaskElts <= NumOpElts) return false; @@ -2218,8 +2219,8 @@ isa(Op<2>())) return false; - int NumOpElts = cast(Op<0>()->getType())->getNumElements(); - int NumMaskElts = getType()->getNumElements(); + int NumOpElts = cast(Op<0>()->getType())->getNumElements(); + int NumMaskElts = cast(getType())->getNumElements(); if (NumMaskElts != NumOpElts * 2) return false; @@ -2960,8 +2961,8 @@ "Invalid cast"); assert(Ty->isVectorTy() == S->getType()->isVectorTy() && "Invalid cast"); assert((!Ty->isVectorTy() || - cast(Ty)->getNumElements() == - cast(S->getType())->getNumElements()) && + cast(Ty)->getNumElements() == + cast(S->getType())->getNumElements()) && "Invalid cast"); if (Ty->isIntOrIntVectorTy()) @@ -2979,8 +2980,8 @@ "Invalid cast"); assert(Ty->isVectorTy() == S->getType()->isVectorTy() && "Invalid cast"); assert((!Ty->isVectorTy() || - cast(Ty)->getNumElements() == - cast(S->getType())->getNumElements()) && + cast(Ty)->getNumElements() == + cast(S->getType())->getNumElements()) && "Invalid cast"); if (Ty->isIntOrIntVectorTy()) @@ -3091,7 +3092,8 @@ if (VectorType *SrcVecTy = dyn_cast(SrcTy)) if (VectorType *DestVecTy = dyn_cast(DestTy)) - if (SrcVecTy->getNumElements() == DestVecTy->getNumElements()) { + if (cast(SrcVecTy)->getNumElements() == + cast(DestVecTy)->getNumElements()) { // An element by element cast. Valid if casting the elements is valid. SrcTy = SrcVecTy->getElementType(); DestTy = DestVecTy->getElementType(); @@ -3213,7 +3215,8 @@ // FIXME: Check address space sizes here if (VectorType *SrcVecTy = dyn_cast(SrcTy)) if (VectorType *DestVecTy = dyn_cast(DestTy)) - if (SrcVecTy->getNumElements() == DestVecTy->getNumElements()) { + if (cast(SrcVecTy)->getNumElements() == + cast(DestVecTy)->getNumElements()) { // An element by element cast. Find the appropriate opcode based on the // element types. SrcTy = SrcVecTy->getElementType(); diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -2887,8 +2887,8 @@ Assert(SrcTy->getPointerAddressSpace() != DestTy->getPointerAddressSpace(), "AddrSpaceCast must be between different address spaces", &I); if (auto *SrcVTy = dyn_cast(SrcTy)) - Assert(SrcVTy->getNumElements() == - cast(DestTy)->getNumElements(), + Assert(cast(SrcVTy)->getNumElements() == + cast(DestTy)->getNumElements(), "AddrSpaceCast vector pointer number of elements mismatch", &I); visitInstruction(I); } @@ -5033,7 +5033,7 @@ default: llvm_unreachable("unexpected intrinsic"); } - Assert(TypeToCheck->getNumElements() == + Assert(cast(TypeToCheck)->getNumElements() == NumRows->getZExtValue() * NumColumns->getZExtValue(), "result of a matrix operation does not fit in the returned vector"); break; @@ -5114,7 +5114,7 @@ Assert(Operand->getType()->isFPOrFPVectorTy(), "Intrinsic first argument must be floating point", &FPI); if (auto *OperandT = dyn_cast(Operand->getType())) { - NumSrcElem = OperandT->getNumElements(); + NumSrcElem = cast(OperandT)->getNumElements(); } Operand = &FPI; @@ -5123,7 +5123,7 @@ Assert(Operand->getType()->isIntOrIntVectorTy(), "Intrinsic result must be an integer", &FPI); if (auto *OperandT = dyn_cast(Operand->getType())) { - Assert(NumSrcElem == OperandT->getNumElements(), + Assert(NumSrcElem == cast(OperandT)->getNumElements(), "Intrinsic first argument and result vector lengths must be equal", &FPI); } @@ -5137,7 +5137,7 @@ Assert(Operand->getType()->isIntOrIntVectorTy(), "Intrinsic first argument must be integer", &FPI); if (auto *OperandT = dyn_cast(Operand->getType())) { - NumSrcElem = OperandT->getNumElements(); + NumSrcElem = cast(OperandT)->getNumElements(); } Operand = &FPI; @@ -5146,7 +5146,7 @@ Assert(Operand->getType()->isFPOrFPVectorTy(), "Intrinsic result must be a floating point", &FPI); if (auto *OperandT = dyn_cast(Operand->getType())) { - Assert(NumSrcElem == OperandT->getNumElements(), + Assert(NumSrcElem == cast(OperandT)->getNumElements(), "Intrinsic first argument and result vector lengths must be equal", &FPI); } @@ -5167,7 +5167,8 @@ if (OperandTy->isVectorTy()) { auto *OperandVecTy = cast(OperandTy); auto *ResultVecTy = cast(ResultTy); - Assert(OperandVecTy->getNumElements() == ResultVecTy->getNumElements(), + Assert(cast(OperandVecTy)->getNumElements() == + cast(ResultVecTy)->getNumElements(), "Intrinsic first argument and result vector lengths must be equal", &FPI); }