diff options
author | Chris Lattner <sabre@nondot.org> | 2002-10-09 23:12:25 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-10-09 23:12:25 +0000 |
commit | c251f9e0ae46dafec666541b8311af878da27f06 (patch) | |
tree | 9e0f7e4d356a25c49e93e275cbae3f5d351807fb /include/llvm | |
parent | 4bbd839d10b14cd9028896800faa892e9d8ce3a3 (diff) | |
download | external_llvm-c251f9e0ae46dafec666541b8311af878da27f06.zip external_llvm-c251f9e0ae46dafec666541b8311af878da27f06.tar.gz external_llvm-c251f9e0ae46dafec666541b8311af878da27f06.tar.bz2 |
- Add new Constant::replaceUsesOfWithOnConstant which has an end result
similar to User::replaceUsesOfWith but actually does the right thing for
constants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4102 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r-- | include/llvm/Constant.h | 25 | ||||
-rw-r--r-- | include/llvm/Constants.h | 4 |
2 files changed, 27 insertions, 2 deletions
diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h index 7085738..3105cea 100644 --- a/include/llvm/Constant.h +++ b/include/llvm/Constant.h @@ -16,10 +16,11 @@ protected: void destroyConstantImpl(); public: - /// setName - Specialize setName to handle symbol table majik... + // setName - Specialize setName to handle symbol table majik... virtual void setName(const std::string &name, SymbolTable *ST = 0); /// Static constructor to get a '0' constant of arbitrary type... + /// static Constant *getNullValue(const Type *Ty); /// isNullValue - Return true if this is the value that would be returned by @@ -29,6 +30,7 @@ public: virtual void print(std::ostream &O) const; /// isConstantExpr - Return true if this is a ConstantExpr + /// virtual bool isConstantExpr() const { return false; } @@ -49,12 +51,31 @@ public: virtual void destroyConstant() { assert(0 && "Not reached!"); } - /// Methods for support type inquiry through isa, cast, and dyn_cast: + //// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const Constant *) { return true; } static inline bool classof(const Value *V) { return V->getValueType() == Value::ConstantVal; } + /// replaceUsesOfWithOnConstant - This method is a special form of + /// User::replaceUsesOfWith (which does not work on constants) that does work + /// on constants. Basically this method goes through the trouble of building + /// a new constant that is equivalent to the current one, with all uses of + /// From replaced with uses of To. After this construction is completed, all + /// of the users of 'this' are replaced to use the new constant, and then + /// 'this' is deleted. In general, you should not call this method, instead, + /// use Value::replaceAllUsesWith, which automatically dispatches to this + /// method as needed. + /// + virtual void replaceUsesOfWithOnConstant(Value *From, Value *To) { + // Provide a default implementation for constants (like integers) that + // cannot use any other values. This cannot be called at runtime, but needs + // to be here to avoid link errors. + assert(getNumOperands() == 0 && "replaceUsesOfWithOnConstant must be " + "implemented for all constants that have operands!"); + assert(0 && "Constants that do not have operands cannot be using 'From'!"); + } + // WARNING: Only to be used by Bytecode & Assembly Parsers! USER CODE SHOULD // NOT USE THIS!! // Returns the number of uses of OldV that were replaced. diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 63d1bfd..a91c197 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -292,6 +292,7 @@ public: virtual bool isNullValue() const { return false; } virtual void destroyConstant(); + virtual void replaceUsesOfWithOnConstant(Value *From, Value *To); /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantArray *) { return true; } @@ -330,6 +331,7 @@ public: virtual bool isNullValue() const { return false; } virtual void destroyConstant(); + virtual void replaceUsesOfWithOnConstant(Value *From, Value *To); /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantStruct *) { return true; } @@ -423,6 +425,7 @@ public: } virtual void destroyConstant(); + virtual void replaceUsesOfWithOnConstant(Value *From, Value *To); /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantPointerRef *) { return true; } @@ -489,6 +492,7 @@ public: virtual bool isConstantExpr() const { return true; } virtual void destroyConstant(); + virtual void replaceUsesOfWithOnConstant(Value *From, Value *To); /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantExpr *) { return true; } |