diff options
author | Chris Lattner <sabre@nondot.org> | 2002-08-18 00:39:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-08-18 00:39:59 +0000 |
commit | e0fbb497ee44f86ec108e4ff8787a848c6ee8655 (patch) | |
tree | 7ce7b1156c9a8032c2542a2aa536bedd799fd4b9 /include | |
parent | 915ce8a02ebefd02b3c34a43267aae5c608ee170 (diff) | |
download | external_llvm-e0fbb497ee44f86ec108e4ff8787a848c6ee8655.zip external_llvm-e0fbb497ee44f86ec108e4ff8787a848c6ee8655.tar.gz external_llvm-e0fbb497ee44f86ec108e4ff8787a848c6ee8655.tar.bz2 |
- ConstantPointerRefs are now automatically removed from the module table
when they are destroyed, which makes Constant::destroyConstant an actually
useful external interface. Expose these methods publicly.
- Implement destroyConstant on ConstPointerNull so that destroyConstant can
be used on any derived type constant safely.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3378 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Constant.h | 27 | ||||
-rw-r--r-- | include/llvm/Constants.h | 18 | ||||
-rw-r--r-- | include/llvm/Module.h | 1 |
3 files changed, 30 insertions, 16 deletions
diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h index 36a26d7..af46dbe 100644 --- a/include/llvm/Constant.h +++ b/include/llvm/Constant.h @@ -14,15 +14,6 @@ protected: inline Constant(const Type *Ty) : User(Ty, Value::ConstantVal) {} ~Constant() {} - // destroyConstant - Called if some element of this constant is no longer - // valid. At this point only other constants may be on the use_list for this - // constant. Any constants on our Use list must also be destroy'd. The - // implementation must be sure to remove the constant from the list of - // available cached constants. Implementations should call - // destroyConstantImpl as the last thing they do, to destroy all users and - // delete this. - // - virtual void destroyConstant() { assert(0 && "Not reached!"); } void destroyConstantImpl(); public: // Specialize setName to handle symbol table majik... @@ -39,6 +30,24 @@ public: // isConstantExpr - Return true if this is a ConstantExpr virtual bool isConstantExpr() const { return false; } + + + // destroyConstant - Called if some element of this constant is no longer + // valid. At this point only other constants may be on the use_list for this + // constant. Any constants on our Use list must also be destroy'd. The + // implementation must be sure to remove the constant from the list of + // available cached constants. Implementations should call + // destroyConstantImpl as the last thing they do, to destroy all users and + // delete this. + // + // Note that this call is only valid on non-primitive constants: You cannot + // destroy an integer constant for example. This API is used to delete + // constants that have ConstantPointerRef's embeded in them when the module is + // deleted, and it is used by GlobalDCE to remove ConstantPointerRefs that are + // unneeded, allowing globals to be DCE'd. + // + virtual void destroyConstant() { assert(0 && "Not reached!"); } + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const Constant *) { return true; } diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index aec7425..82a5c1c 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -252,7 +252,6 @@ protected: ConstantArray(const ArrayType *T, const std::vector<Constant*> &Val); ~ConstantArray() {} - virtual void destroyConstant(); public: static ConstantArray *get(const ArrayType *T, const std::vector<Constant*> &); static ConstantArray *get(const std::string &Initializer); @@ -267,6 +266,8 @@ public: // getNullValue. virtual bool isNullValue() const { return false; } + virtual void destroyConstant(); + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantArray *) { return true; } static bool classof(const Constant *CPV); // defined in Constants.cpp @@ -285,7 +286,6 @@ protected: ConstantStruct(const StructType *T, const std::vector<Constant*> &Val); ~ConstantStruct() {} - virtual void destroyConstant(); public: static ConstantStruct *get(const StructType *T, const std::vector<Constant*> &V); @@ -300,6 +300,8 @@ public: // getNullValue. virtual bool isNullValue() const { return false; } + virtual void destroyConstant(); + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantStruct *) { return true; } static bool classof(const Constant *CPV); // defined in Constants.cpp @@ -352,6 +354,8 @@ public: // getNullValue. virtual bool isNullValue() const { return true; } + virtual void destroyConstant(); + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantPointerNull *) { return true; } static inline bool classof(const ConstantPointer *P) { @@ -376,8 +380,6 @@ class ConstantPointerRef : public ConstantPointer { protected: ConstantPointerRef(GlobalValue *GV); ~ConstantPointerRef() {} - - virtual void destroyConstant() { destroyConstantImpl(); } public: static ConstantPointerRef *get(GlobalValue *GV); @@ -388,6 +390,8 @@ public: return cast<GlobalValue>(Operands[0].get()); } + virtual void destroyConstant(); + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantPointerRef *) { return true; } static inline bool classof(const ConstantPointer *CPV) { @@ -426,8 +430,6 @@ protected: const Type *DestTy); ~ConstantExpr() {} - virtual void destroyConstant(); - public: // Static methods to construct a ConstantExpr of different kinds. @@ -453,7 +455,9 @@ public: // isConstantExpr - Return true if this is a ConstantExpr virtual bool isConstantExpr() const { return true; } - + + virtual void destroyConstant(); + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantExpr *) { return true; } static inline bool classof(const Constant *CPV) { diff --git a/include/llvm/Module.h b/include/llvm/Module.h index a9e3aba..3496e71 100644 --- a/include/llvm/Module.h +++ b/include/llvm/Module.h @@ -63,6 +63,7 @@ private: friend class ConstantPointerRef; void mutateConstantPointerRef(GlobalValue *OldGV, GlobalValue *NewGV); ConstantPointerRef *getConstantPointerRef(GlobalValue *GV); + void destroyConstantPointerRef(ConstantPointerRef *CPR); public: Module(); |