Skip to content

Commit

Permalink
[SVE] Do not store a bool for Scalable in VectorType
Browse files Browse the repository at this point in the history
Summary:
- Whether or not a vector is scalable is a function of its type. Since
all instances of ScalableVectorType will have true for this value and
all instances of FixedVectorType will have false for this value, there
is no need to store it as a class member.

Reviewers: efriedma, fpetrogalli, kmclaughlin

Reviewed By: fpetrogalli

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D78601
  • Loading branch information
christetreault-llvm committed Apr 24, 2020
1 parent 4cf73a3 commit 947be4a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
26 changes: 18 additions & 8 deletions llvm/include/llvm/IR/DerivedTypes.h
Expand Up @@ -404,11 +404,17 @@ class VectorType : public Type {
/// The element type of the vector.
Type *ContainedType;

/// The element count of this vector
ElementCount EC;

protected:
VectorType(Type *ElType, ElementCount EC, Type::TypeID TID);
/// The element quantity of this vector. The meaning of this value depends
/// on the type of vector:
/// - For FixedVectorType = <ElementQuantity x ty>, there are
/// exactly ElementQuantity elements in this vector.
/// - For ScalableVectorType = <vscale x ElementQuantity x ty>,
/// there are vscale * ElementQuantity elements in this vector, where
/// vscale is a runtime-constant integer greater than 0.
const unsigned ElementQuantity;

VectorType(Type *ElType, unsigned EQ, Type::TypeID TID);

public:
VectorType(const VectorType &) = delete;
Expand Down Expand Up @@ -523,7 +529,7 @@ class VectorType : public Type {

/// Return an ElementCount instance to represent the (possibly scalable)
/// number of elements in the vector.
ElementCount getElementCount() const { return EC; }
inline ElementCount getElementCount() const;

/// Methods for support type inquiry through isa, cast, and dyn_cast.
static bool classof(const Type *T) {
Expand All @@ -538,7 +544,7 @@ bool Type::isVectorTy() const { return isa<VectorType>(this); }
class FixedVectorType : public VectorType {
protected:
FixedVectorType(Type *ElTy, unsigned NumElts)
: VectorType(ElTy, {NumElts, false}, FixedVectorTyID) {}
: VectorType(ElTy, NumElts, FixedVectorTyID) {}

public:
static FixedVectorType *get(Type *ElementType, unsigned NumElts);
Expand All @@ -552,20 +558,24 @@ class FixedVectorType : public VectorType {
class ScalableVectorType : public VectorType {
protected:
ScalableVectorType(Type *ElTy, unsigned MinNumElts)
: VectorType(ElTy, {MinNumElts, true}, ScalableVectorTyID) {}
: VectorType(ElTy, MinNumElts, ScalableVectorTyID) {}

public:
static ScalableVectorType *get(Type *ElementType, unsigned MinNumElts);

/// Get the minimum number of elements in this vector. The actual number of
/// elements in the vector is an integer multiple of this value.
uint64_t getMinNumElements() const { return getElementCount().Min; }
uint64_t getMinNumElements() const { return ElementQuantity; }

static bool classof(const Type *T) {
return T->getTypeID() == ScalableVectorTyID;
}
};

inline ElementCount VectorType::getElementCount() const {
return ElementCount(ElementQuantity, isa<ScalableVectorType>(this));
}

/// Class to represent pointers.
class PointerType : public Type {
explicit PointerType(Type *ElType, unsigned AddrSpace);
Expand Down
5 changes: 3 additions & 2 deletions llvm/lib/IR/Type.cpp
Expand Up @@ -580,8 +580,9 @@ bool ArrayType::isValidElementType(Type *ElemTy) {
// VectorType Implementation
//===----------------------------------------------------------------------===//

VectorType::VectorType(Type *ElType, ElementCount EC, Type::TypeID TID)
: Type(ElType->getContext(), TID), ContainedType(ElType), EC(EC) {
VectorType::VectorType(Type *ElType, unsigned EQ, Type::TypeID TID)
: Type(ElType->getContext(), TID), ContainedType(ElType),
ElementQuantity(EQ) {
ContainedTys = &ContainedType;
NumContainedTys = 1;
}
Expand Down

0 comments on commit 947be4a

Please sign in to comment.