template <bool preserveNames=true, typename T = ConstantFolder> class IRBuilder{
BasicBlock *BB;
BasicBlock::iterator InsertPt;
- T Folder;
LLVMContext &Context;
+ T Folder;
public:
- IRBuilder(LLVMContext &C, const T& F = T()) :
- Folder(F), Context(C) { ClearInsertionPoint(); }
+ 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 = T())
- : Folder(F), Context(*TheBB->getParent()->getContext()) {
+ explicit IRBuilder(BasicBlock *TheBB, const T& F)
+ : Context(TheBB->getContext()), Folder(F) {
SetInsertPoint(TheBB);
}
- IRBuilder(BasicBlock *TheBB, BasicBlock::iterator IP, const T& F = T())
- : Folder(F), Context(*TheBB->getParent()->getContext()) {
+ 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);
}
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);
}
//===--------------------------------------------------------------------===//
}
Value *CreateGlobalString(const char *Str = "", const char *Name = "") {
Constant *StrConstant = Context.getConstantArray(Str, true);
- GlobalVariable *gv = new GlobalVariable(*BB->getParent()->getParent(),
+ Module &M = *BB->getParent()->getParent();
+ GlobalVariable *gv = new GlobalVariable(M,
StrConstant->getType(),
true,
GlobalValue::InternalLinkage,
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);
}
//===--------------------------------------------------------------------===//