[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