Add a version of the globalvariable ctor that inserts at a specific location.
authorChris Lattner <sabre@nondot.org>
Sat, 30 Sep 2006 21:31:26 +0000 (21:31 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 30 Sep 2006 21:31:26 +0000 (21:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30677 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/GlobalVariable.h
lib/VMCore/Globals.cpp

index 87df5d514fdb549fb5bc33cd37747d28e1439d28..0679e38bb3e03dc6935e4a3a5d5b53ca93345ed4 100644 (file)
@@ -49,11 +49,15 @@ class GlobalVariable : public GlobalValue {
 public:
   /// 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);
-
+  /// 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);
+  
   /// isExternal - Is this global variable lacking an initializer?  If so, the
   /// global variable is defined in some other translation unit, and is thus
   /// externally defined here.
index 3ea8265ebad9c8ec2e27fe13d11ecc7309927519..e49f47766f48fbe67ec497157db8e4b0b8ef5e82 100644 (file)
@@ -91,6 +91,27 @@ GlobalVariable::GlobalVariable(const Type *Ty, bool constant, LinkageTypes Link,
     ParentModule->getGlobalList().push_back(this);
 }
 
+GlobalVariable::GlobalVariable(const Type *Ty, bool constant, LinkageTypes Link,
+                               Constant *InitVal,
+                               const std::string &Name, GlobalVariable *Before)
+  : GlobalValue(PointerType::get(Ty), Value::GlobalVariableVal,
+                &Initializer, InitVal != 0, Link, Name), 
+    isConstantGlobal(constant) {
+  if (InitVal) {
+    assert(InitVal->getType() == Ty &&
+           "Initializer should be the same type as the GlobalVariable!");
+    Initializer.init(InitVal, this);
+  } else {
+    Initializer.init(0, this);
+  }
+  
+  LeakDetector::addGarbageObject(this);
+  
+  if (Before)
+    Before->getParent()->getGlobalList().insert(Before, this);
+}
+
+
 void GlobalVariable::setParent(Module *parent) {
   if (getParent())
     LeakDetector::addGarbageObject(this);