[PATCH] D78601: [SVE] Do not store a bool for Scalable in VectorType
Christopher Tetreault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 24 10:49:01 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG947be4a024b9: [SVE] Do not store a bool for Scalable in VectorType (authored by ctetreau).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D78601/new/
https://reviews.llvm.org/D78601
Files:
llvm/include/llvm/IR/DerivedTypes.h
llvm/lib/IR/Type.cpp
Index: llvm/lib/IR/Type.cpp
===================================================================
--- llvm/lib/IR/Type.cpp
+++ llvm/lib/IR/Type.cpp
@@ -580,8 +580,9 @@
// 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;
}
Index: llvm/include/llvm/IR/DerivedTypes.h
===================================================================
--- llvm/include/llvm/IR/DerivedTypes.h
+++ llvm/include/llvm/IR/DerivedTypes.h
@@ -404,11 +404,17 @@
/// 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;
@@ -523,7 +529,7 @@
/// 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) {
@@ -538,7 +544,7 @@
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);
@@ -552,20 +558,24 @@
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);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78601.259932.patch
Type: text/x-patch
Size: 3364 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200424/d0c13438/attachment.bin>
More information about the llvm-commits
mailing list