1 //===-- llvm/Constant.h - Constant class definition --------------*- C++ -*--=//
3 // This file contains the declaration of the Constant class.
5 //===----------------------------------------------------------------------===//
7 #ifndef LLVM_CONSTANT_H
8 #define LLVM_CONSTANT_H
10 #include "llvm/User.h"
12 class Constant : public User {
14 inline Constant(const Type *Ty) : User(Ty, Value::ConstantVal) {}
17 // destroyConstant - Called if some element of this constant is no longer
18 // valid. At this point only other constants may be on the use_list for this
19 // constant. Any constants on our Use list must also be destroy'd. The
20 // implementation must be sure to remove the constant from the list of
21 // available cached constants. Implementations should call
22 // destroyConstantImpl as the last thing they do, to destroy all users and
25 virtual void destroyConstant() { assert(0 && "Not reached!"); }
26 void destroyConstantImpl();
28 // Specialize setName to handle symbol table majik...
29 virtual void setName(const std::string &name, SymbolTable *ST = 0);
31 // Static constructor to get a '0' constant of arbitrary type...
32 static Constant *getNullValue(const Type *Ty);
34 // isNullValue - Return true if this is the value that would be returned by
36 virtual bool isNullValue() const = 0;
38 virtual void print(std::ostream &O) const;
40 // isConstantExpr - Return true if this is a ConstantExpr
41 virtual bool isConstantExpr() const { return false; }
43 // Methods for support type inquiry through isa, cast, and dyn_cast:
44 static inline bool classof(const Constant *) { return true; }
45 static inline bool classof(const Value *V) {
46 return V->getValueType() == Value::ConstantVal;
49 // WARNING: Only to be used by Bytecode & Assembly Parsers! USER CODE SHOULD
51 // Returns the number of uses of OldV that were replaced.
52 virtual unsigned mutateReferences(Value* OldV, Value *NewV) { return 0; }