[llvm-commits] CVS: llvm/include/llvm/DerivedTypes.h Value.h

Chris Lattner lattner at cs.uiuc.edu
Thu Oct 2 14:45:00 PDT 2003


Changes in directory llvm/include/llvm:

DerivedTypes.h updated: 1.39 -> 1.40
Value.h updated: 1.43 -> 1.44

---
Log message:

There is no reason for Value to be an AbstractTypeUser.  This just makes things
significantly more complete.  Instead, just make DerivedType's AbstractTypeUser's,
and make Value contain a PATypeHolder.  This will also be more efficient in the
future.


---
Diffs of the changes:

Index: llvm/include/llvm/DerivedTypes.h
diff -u llvm/include/llvm/DerivedTypes.h:1.39 llvm/include/llvm/DerivedTypes.h:1.40
--- llvm/include/llvm/DerivedTypes.h:1.39	Tue Sep 30 13:37:37 2003
+++ llvm/include/llvm/DerivedTypes.h	Thu Oct  2 14:44:23 2003
@@ -19,7 +19,7 @@
 class StructValType;
 class PointerValType;
 
-class DerivedType : public Type {
+class DerivedType : public Type, public AbstractTypeUser {
   char isRefining;                                   // Used for recursive types
 
   // AbstractTypeUsers - Implement a list of the users that need to be notified
@@ -80,6 +80,8 @@
     refineAbstractTypeToInternal(NewType, true);
   }
 
+  void dump() const { Value::dump(); }
+
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const DerivedType *T) { return true; }
   static inline bool classof(const Type *T) {
@@ -149,7 +151,6 @@
                            const std::vector<const Type*> &Params,
                            bool isVarArg);
 
-
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const FunctionType *T) { return true; }
   static inline bool classof(const Type *T) {
@@ -409,6 +410,16 @@
   static OpaqueType *get() {
     return new OpaqueType();           // All opaque types are distinct
   }
+
+  // refineAbstractType - Called when a contained type is found to be more
+  // concrete - this could potentially change us from an abstract type to a
+  // concrete type.
+  //
+  virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy) {
+    // This class never uses other types!
+    abort();
+  }
+
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const OpaqueType *T) { return true; }


Index: llvm/include/llvm/Value.h
diff -u llvm/include/llvm/Value.h:1.43 llvm/include/llvm/Value.h:1.44
--- llvm/include/llvm/Value.h:1.43	Tue Sep 30 13:37:37 2003
+++ llvm/include/llvm/Value.h	Thu Oct  2 14:44:23 2003
@@ -34,9 +34,7 @@
 /// Value - The base class of all values computed by a program that may be used
 /// as operands to other values.
 ///
-class Value : public Annotable,         // Values are annotable
-	      public AbstractTypeUser { // Values use potentially abstract types
-public:
+struct Value : public Annotable {         // Values are annotable
   enum ValueTy {
     TypeVal,                // This is an instance of Type
     ConstantVal,            // This is an instance of Constant
@@ -50,7 +48,7 @@
 private:
   std::vector<User *> Uses;
   std::string Name;
-  PATypeHandle Ty;
+  PATypeHolder Ty;
   ValueTy VTy;
 
   void operator=(const Value &);     // Do not implement
@@ -61,7 +59,7 @@
   
   /// dump - Support for debugging, callable in GDB: V->dump()
   //
-  void dump() const;
+  virtual void dump() const;
 
   /// print - Implement operator<< on Value...
   ///
@@ -93,12 +91,6 @@
   // Only use when in type resolution situations!
   void uncheckedReplaceAllUsesWith(Value *V);
 
-  /// refineAbstractType - This function is implemented because we use
-  /// potentially abstract types, and these types may be resolved to more
-  /// concrete types after we are constructed.
-  ///
-  virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
-  
   //----------------------------------------------------------------------
   // Methods for handling the vector of uses of this Value.
   //





More information about the llvm-commits mailing list