remove SectionFlags::Small: it is only used on Xcore, and we'll find
[oota-llvm.git] / include / llvm / Support / IRBuilder.h
index f92f8654a57107923b9670805f9b76543f4ae8ff..835a28622f144d7e1c2501cc24f44e1736550a3c 100644 (file)
@@ -42,17 +42,33 @@ namespace llvm {
 template <bool preserveNames=true, typename T = ConstantFolder> class IRBuilder{
   BasicBlock *BB;
   BasicBlock::iterator InsertPt;
+  LLVMContext &Context;
   T Folder;
-  LLVMContext& Context;
 public:
-  IRBuilder(const T& F = T(), LLVMContext &C = getGlobalContext()) :
-    Folder(F), Context(C) { ClearInsertionPoint(); }
-  explicit IRBuilder(BasicBlock *TheBB, const T& F = T(),
-                     LLVMContext &C = getGlobalContext()) :
-    Folder(F), Context(C) { SetInsertPoint(TheBB); }
-  IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F = T(),
-            LLVMContext &C = getGlobalContext())
-    : Folder(F), Context(C) { SetInsertPoint(TheBB, IP); }
+  IRBuilder(LLVMContext &C, const T& F) :
+    Context(C), Folder(F) { ClearInsertionPoint(); }
+  
+  IRBuilder(LLVMContext &C) : Context(C), Folder(C) { ClearInsertionPoint(); }
+  
+  explicit IRBuilder(BasicBlock *TheBB, const T& F)
+      : Context(TheBB->getContext()), Folder(F) {
+    SetInsertPoint(TheBB);
+  }
+  
+  explicit IRBuilder(BasicBlock *TheBB)
+      : Context(TheBB->getContext()), Folder(Context) {
+    SetInsertPoint(TheBB);
+  }
+  
+  IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F)
+      : Context(TheBB->getContext()), Folder(F) {
+    SetInsertPoint(TheBB, IP);
+  }
+  
+  IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP)
+      : Context(TheBB->getContext()), Folder(Context) {
+    SetInsertPoint(TheBB, IP);
+  }
 
   /// getFolder - Get the constant folder being used.
   const T& getFolder() { return Folder; }
@@ -295,17 +311,17 @@ public:
   Value *CreateNeg(Value *V, const char *Name = "") {
     if (Constant *VC = dyn_cast<Constant>(V))
       return Folder.CreateNeg(VC);
-    return Insert(BinaryOperator::CreateNeg(V), Name);
+    return Insert(BinaryOperator::CreateNeg(Context, V), Name);
   }
   Value *CreateFNeg(Value *V, const char *Name = "") {
     if (Constant *VC = dyn_cast<Constant>(V))
       return Folder.CreateFNeg(VC);
-    return Insert(BinaryOperator::CreateFNeg(V), Name);
+    return Insert(BinaryOperator::CreateFNeg(Context, V), Name);
   }
   Value *CreateNot(Value *V, const char *Name = "") {
     if (Constant *VC = dyn_cast<Constant>(V))
       return Folder.CreateNot(VC);
-    return Insert(BinaryOperator::CreateNot(V), Name);
+    return Insert(BinaryOperator::CreateNot(Context, V), Name);
   }
 
   //===--------------------------------------------------------------------===//
@@ -398,13 +414,14 @@ public:
   }
   Value *CreateGlobalString(const char *Str = "", const char *Name = "") {
     Constant *StrConstant = Context.getConstantArray(Str, true);
-    GlobalVariable *gv = new GlobalVariable(Context,
+    Module &M = *BB->getParent()->getParent();
+    GlobalVariable *gv = new GlobalVariable(M,
                                             StrConstant->getType(),
                                             true,
                                             GlobalValue::InternalLinkage,
                                             StrConstant,
                                             "",
-                                            BB->getParent()->getParent(),
+                                            0,
                                             false);
     gv->setName(Name);
     return gv;
@@ -560,14 +577,14 @@ public:
     if (Constant *LC = dyn_cast<Constant>(LHS))
       if (Constant *RC = dyn_cast<Constant>(RHS))
         return Folder.CreateICmp(P, LC, RC);
-    return Insert(new ICmpInst(P, LHS, RHS), Name);
+    return Insert(new ICmpInst(Context, P, LHS, RHS), Name);
   }
   Value *CreateFCmp(CmpInst::Predicate P, Value *LHS, Value *RHS,
                     const char *Name = "") {
     if (Constant *LC = dyn_cast<Constant>(LHS))
       if (Constant *RC = dyn_cast<Constant>(RHS))
         return Folder.CreateFCmp(P, LC, RC);
-    return Insert(new FCmpInst(P, LHS, RHS), Name);
+    return Insert(new FCmpInst(Context, P, LHS, RHS), Name);
   }
 
   //===--------------------------------------------------------------------===//