diff --git a/llvm/include/llvm/IR/DerivedTypes.h b/llvm/include/llvm/IR/DerivedTypes.h --- a/llvm/include/llvm/IR/DerivedTypes.h +++ b/llvm/include/llvm/IR/DerivedTypes.h @@ -423,21 +423,11 @@ /// Get the number of elements in this vector. It does not make sense to call /// this function on a scalable vector, and this will be moved into /// FixedVectorType in a future commit - unsigned getNumElements() const { - ElementCount EC = getElementCount(); -#ifdef STRICT_FIXED_SIZE_VECTORS - assert(!EC.isScalable() && - "Request for fixed number of elements from scalable vector"); - return EC.getKnownMinValue(); -#else - if (EC.isScalable()) - WithColor::warning() - << "The code that requested the fixed number of elements has made " - "the assumption that this vector is not scalable. This assumption " - "was not correct, and this may lead to broken code\n"; - return EC.getKnownMinValue(); -#endif - } + LLVM_ATTRIBUTE_DEPRECATED( + inline unsigned getNumElements() const, + "Calling this function via a base VectorType is deprecated. Either call " + "getElementCount() and handle the case where Scalable is true or cast to " + "FixedVectorType."); Type *getElementType() const { return ContainedType; } @@ -540,6 +530,21 @@ } }; +unsigned VectorType::getNumElements() const { + ElementCount EC = getElementCount(); +#ifdef STRICT_FIXED_SIZE_VECTORS + assert(!EC.isScalable() && + "Request for fixed number of elements from scalable vector"); +#else + if (EC.isScalable()) + WithColor::warning() + << "The code that requested the fixed number of elements has made the " + "assumption that this vector is not scalable. This assumption was " + "not correct, and this may lead to broken code\n"; +#endif + return EC.getKnownMinValue(); +} + /// Class to represent fixed width SIMD vectors class FixedVectorType : public VectorType { protected: @@ -583,6 +588,8 @@ static bool classof(const Type *T) { return T->getTypeID() == FixedVectorTyID; } + + unsigned getNumElements() const { return ElementQuantity; } }; /// Class to represent scalable SIMD vectors