[llvm-commits] CVS: llvm/include/llvm/DerivedTypes.h Type.h
Chris Lattner
lattner at cs.uiuc.edu
Sat Nov 12 19:13:37 PST 2005
Changes in directory llvm/include/llvm:
DerivedTypes.h updated: 1.68 -> 1.69
Type.h updated: 1.79 -> 1.80
---
Log message:
Refactor some code, moving methods and data around. This gets rid of some
virtual methods.
---
Diffs of the changes: (+34 -51)
DerivedTypes.h | 31 +------------------------------
Type.h | 54 +++++++++++++++++++++++++++++++++---------------------
2 files changed, 34 insertions(+), 51 deletions(-)
Index: llvm/include/llvm/DerivedTypes.h
diff -u llvm/include/llvm/DerivedTypes.h:1.68 llvm/include/llvm/DerivedTypes.h:1.69
--- llvm/include/llvm/DerivedTypes.h:1.68 Sun May 15 11:13:11 2005
+++ llvm/include/llvm/DerivedTypes.h Sat Nov 12 21:13:26 2005
@@ -32,17 +32,10 @@
class PackedValType;
class DerivedType : public Type, public AbstractTypeUser {
- // AbstractTypeUsers - Implement a list of the users that need to be notified
- // if I am a type, and I get resolved into a more concrete type.
- //
- mutable std::vector<AbstractTypeUser *> AbstractTypeUsers;
friend class Type;
protected:
- DerivedType(TypeID id) : Type("", id) {}
- ~DerivedType() {
- assert(AbstractTypeUsers.empty());
- }
+ DerivedType(TypeID id) : Type(id) {}
/// notifyUsesThatTypeBecameConcrete - Notify AbstractTypeUsers of this type
/// that the current type has transitioned from being abstract to being
@@ -56,12 +49,6 @@
///
void dropAllTypeUses();
- void RefCountIsZero() const {
- if (AbstractTypeUsers.empty())
- delete this;
- }
-
-
public:
//===--------------------------------------------------------------------===//
@@ -69,22 +56,6 @@
// are managed by (add|remove)AbstractTypeUser. See comments in
// AbstractTypeUser.h for more information.
- /// addAbstractTypeUser - Notify an abstract type that there is a new user of
- /// it. This function is called primarily by the PATypeHandle class.
- ///
- void addAbstractTypeUser(AbstractTypeUser *U) const {
- assert(isAbstract() && "addAbstractTypeUser: Current type not abstract!");
- AbstractTypeUsers.push_back(U);
- }
-
- /// removeAbstractTypeUser - Notify an abstract type that a user of the class
- /// no longer has a handle to the type. This function is called primarily by
- /// the PATypeHandle class. When there are no users of the abstract type, it
- /// is annihilated, because there is no way to get a reference to it ever
- /// again.
- ///
- void removeAbstractTypeUser(AbstractTypeUser *U) const;
-
/// refineAbstractTypeTo - This function is used to when it is discovered that
/// the 'this' abstract type is actually equivalent to the NewType specified.
/// This causes all users of 'this' to switch to reference the more concrete
Index: llvm/include/llvm/Type.h
diff -u llvm/include/llvm/Type.h:1.79 llvm/include/llvm/Type.h:1.80
--- llvm/include/llvm/Type.h:1.79 Sat Nov 12 04:07:47 2005
+++ llvm/include/llvm/Type.h Sat Nov 12 21:13:26 2005
@@ -49,6 +49,7 @@
class PointerType;
class StructType;
class PackedType;
+class TypeMapBase;
class Type {
public:
@@ -94,17 +95,16 @@
const Type *getForwardedTypeInternal() const;
protected:
- Type(const std::string& Name, TypeID id);
- virtual ~Type() {}
+ Type(const char *Name, TypeID id);
+ Type(TypeID id) : ID(id), Abstract(false), RefCount(0), ForwardType(0) {}
+ virtual ~Type() {
+ assert(AbstractTypeUsers.empty());
+ }
/// Types can become nonabstract later, if they are refined.
///
inline void setAbstract(bool Val) { Abstract = Val; }
- // PromoteAbstractToConcrete - This is an internal method used to calculate
- // change "Abstract" from true to false when types are refined.
- void PromoteAbstractToConcrete();
-
unsigned getRefCount() const { return RefCount; }
/// ForwardType - This field is used to implement the union find scheme for
@@ -121,6 +121,10 @@
/// not contain any elements (most are derived).
std::vector<PATypeHandle> ContainedTys;
+ /// AbstractTypeUsers - Implement a list of the users that need to be notified
+ /// if I am a type, and I get resolved into a more concrete type.
+ ///
+ mutable std::vector<AbstractTypeUser *> AbstractTypeUsers;
public:
void print(std::ostream &O) const;
@@ -295,15 +299,6 @@
/// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const Type *T) { return true; }
- // Virtual methods used by callbacks below. These should only be implemented
- // in the DerivedType class.
- virtual void addAbstractTypeUser(AbstractTypeUser *U) const {
- abort(); // Only on derived types!
- }
- virtual void removeAbstractTypeUser(AbstractTypeUser *U) const {
- abort(); // Only on derived types!
- }
-
void addRef() const {
assert(isAbstract() && "Cannot add a reference to a non-abstract type!");
++RefCount;
@@ -315,9 +310,25 @@
// If this is the last PATypeHolder using this object, and there are no
// PATypeHandles using it, the type is dead, delete it now.
- if (--RefCount == 0)
- RefCountIsZero();
+ if (--RefCount == 0 && AbstractTypeUsers.empty())
+ delete this;
}
+
+ /// addAbstractTypeUser - Notify an abstract type that there is a new user of
+ /// it. This function is called primarily by the PATypeHandle class.
+ ///
+ void addAbstractTypeUser(AbstractTypeUser *U) const {
+ assert(isAbstract() && "addAbstractTypeUser: Current type not abstract!");
+ AbstractTypeUsers.push_back(U);
+ }
+
+ /// removeAbstractTypeUser - Notify an abstract type that a user of the class
+ /// no longer has a handle to the type. This function is called primarily by
+ /// the PATypeHandle class. When there are no users of the abstract type, it
+ /// is annihilated, because there is no way to get a reference to it ever
+ /// again.
+ ///
+ void removeAbstractTypeUser(AbstractTypeUser *U) const;
/// clearAllTypeMaps - This method frees all internal memory used by the
/// type subsystem, which can be used in environments where this memory is
@@ -330,10 +341,11 @@
/// their size is relatively uncommon, move this operation out of line.
bool isSizedDerivedType() const;
- virtual void RefCountIsZero() const {
- abort(); // only on derived types!
- }
-
+protected:
+ // PromoteAbstractToConcrete - This is an internal method used to calculate
+ // change "Abstract" from true to false when types are refined.
+ void PromoteAbstractToConcrete();
+ friend class TypeMapBase;
};
//===----------------------------------------------------------------------===//
More information about the llvm-commits
mailing list