- GlobalVariable(const Type *Ty, bool isConstant, ConstPoolVal *Initializer = 0,
- const string &Name = "");
- ~GlobalVariable() {}
-
- // Specialize setName to handle symbol table majik...
- virtual void setName(const string &name, SymbolTable *ST = 0);
-
- // The initializer for the global variable/constant is held by Operands[0] if
- // an initializer is specified.
- //
- inline bool hasInitializer() const { return !Operands.empty(); }
- inline ConstPoolVal *getInitializer() const {
+ /// GlobalVariable ctor - If a parent module is specified, the global is
+ /// automatically inserted into the end of the specified modules global list.
+ GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes Linkage,
+ Constant *Initializer = 0, const std::string &Name = "",
+ Module *Parent = 0, bool ThreadLocal = false);
+ /// GlobalVariable ctor - This creates a global and inserts it before the
+ /// specified other global.
+ GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes Linkage,
+ Constant *Initializer, const std::string &Name,
+ GlobalVariable *InsertBefore, bool ThreadLocal = false);
+
+ /// isDeclaration - Is this global variable lacking an initializer? If so,
+ /// the global variable is defined in some other translation unit, and is thus
+ /// only a declaration here.
+ virtual bool isDeclaration() const { return getNumOperands() == 0; }
+
+ /// hasInitializer - Unless a global variable isExternal(), it has an
+ /// initializer. The initializer for the global variable/constant is held by
+ /// Initializer if an initializer is specified.
+ ///
+ inline bool hasInitializer() const { return !isDeclaration(); }
+
+ /// getInitializer - Return the initializer for this global variable. It is
+ /// illegal to call this method if the global is external, because we cannot
+ /// tell what the value is initialized to!
+ ///
+ inline Constant *getInitializer() const {