@@ -447,19 +447,8 @@ Value *StoreInst::getPointerOperand() const {
447447 return Ctx.getValue (cast<llvm::StoreInst>(Val)->getPointerOperand ());
448448}
449449
450- UnreachableInst *UnreachableInst::create (Instruction *InsertBefore,
451- Context &Ctx) {
452- auto &Builder = Ctx.getLLVMIRBuilder ();
453- llvm::Instruction *LLVMBefore = InsertBefore->getTopmostLLVMInstruction ();
454- Builder.SetInsertPoint (LLVMBefore);
455- llvm::UnreachableInst *NewUI = Builder.CreateUnreachable ();
456- return Ctx.createUnreachableInst (NewUI);
457- }
458-
459- UnreachableInst *UnreachableInst::create (BasicBlock *InsertAtEnd,
460- Context &Ctx) {
461- auto &Builder = Ctx.getLLVMIRBuilder ();
462- Builder.SetInsertPoint (cast<llvm::BasicBlock>(InsertAtEnd->Val ));
450+ UnreachableInst *UnreachableInst::create (InsertPosition Pos, Context &Ctx) {
451+ auto &Builder = setInsertPos (Pos);
463452 llvm::UnreachableInst *NewUI = Builder.CreateUnreachable ();
464453 return Ctx.createUnreachableInst (NewUI);
465454}
@@ -478,18 +467,9 @@ ReturnInst *ReturnInst::createCommon(Value *RetVal, IRBuilder<> &Builder,
478467 return Ctx.createReturnInst (NewRI);
479468}
480469
481- ReturnInst *ReturnInst::create (Value *RetVal, Instruction *InsertBefore,
482- Context &Ctx) {
483- llvm::Instruction *BeforeIR = InsertBefore->getTopmostLLVMInstruction ();
484- auto &Builder = Ctx.getLLVMIRBuilder ();
485- Builder.SetInsertPoint (BeforeIR);
486- return createCommon (RetVal, Builder, Ctx);
487- }
488-
489- ReturnInst *ReturnInst::create (Value *RetVal, BasicBlock *InsertAtEnd,
470+ ReturnInst *ReturnInst::create (Value *RetVal, InsertPosition Pos,
490471 Context &Ctx) {
491- auto &Builder = Ctx.getLLVMIRBuilder ();
492- Builder.SetInsertPoint (cast<llvm::BasicBlock>(InsertAtEnd->Val ));
472+ auto &Builder = setInsertPos (Pos);
493473 return createCommon (RetVal, Builder, Ctx);
494474}
495475
@@ -534,14 +514,9 @@ void CallBase::setCalledFunction(Function *F) {
534514}
535515
536516CallInst *CallInst::create (FunctionType *FTy, Value *Func,
537- ArrayRef<Value *> Args, BasicBlock::iterator WhereIt,
538- BasicBlock *WhereBB, Context &Ctx,
539- const Twine &NameStr) {
540- auto &Builder = Ctx.getLLVMIRBuilder ();
541- if (WhereIt != WhereBB->end ())
542- Builder.SetInsertPoint ((*WhereIt).getTopmostLLVMInstruction ());
543- else
544- Builder.SetInsertPoint (cast<llvm::BasicBlock>(WhereBB->Val ));
517+ ArrayRef<Value *> Args, InsertPosition Pos,
518+ Context &Ctx, const Twine &NameStr) {
519+ auto &Builder = setInsertPos (Pos);
545520 SmallVector<llvm::Value *> LLVMArgs;
546521 LLVMArgs.reserve (Args.size ());
547522 for (Value *Arg : Args)
@@ -551,30 +526,11 @@ CallInst *CallInst::create(FunctionType *FTy, Value *Func,
551526 return Ctx.createCallInst (NewCI);
552527}
553528
554- CallInst *CallInst::create (FunctionType *FTy, Value *Func,
555- ArrayRef<Value *> Args, Instruction *InsertBefore,
556- Context &Ctx, const Twine &NameStr) {
557- return CallInst::create (FTy, Func, Args, InsertBefore->getIterator (),
558- InsertBefore->getParent (), Ctx, NameStr);
559- }
560-
561- CallInst *CallInst::create (FunctionType *FTy, Value *Func,
562- ArrayRef<Value *> Args, BasicBlock *InsertAtEnd,
563- Context &Ctx, const Twine &NameStr) {
564- return CallInst::create (FTy, Func, Args, InsertAtEnd->end (), InsertAtEnd, Ctx,
565- NameStr);
566- }
567-
568529InvokeInst *InvokeInst::create (FunctionType *FTy, Value *Func,
569530 BasicBlock *IfNormal, BasicBlock *IfException,
570- ArrayRef<Value *> Args, BBIterator WhereIt,
571- BasicBlock *WhereBB, Context &Ctx,
572- const Twine &NameStr) {
573- auto &Builder = Ctx.getLLVMIRBuilder ();
574- if (WhereIt != WhereBB->end ())
575- Builder.SetInsertPoint ((*WhereIt).getTopmostLLVMInstruction ());
576- else
577- Builder.SetInsertPoint (cast<llvm::BasicBlock>(WhereBB->Val ));
531+ ArrayRef<Value *> Args, InsertPosition Pos,
532+ Context &Ctx, const Twine &NameStr) {
533+ auto &Builder = setInsertPos (Pos);
578534 SmallVector<llvm::Value *> LLVMArgs;
579535 LLVMArgs.reserve (Args.size ());
580536 for (Value *Arg : Args)
@@ -586,24 +542,6 @@ InvokeInst *InvokeInst::create(FunctionType *FTy, Value *Func,
586542 return Ctx.createInvokeInst (Invoke);
587543}
588544
589- InvokeInst *InvokeInst::create (FunctionType *FTy, Value *Func,
590- BasicBlock *IfNormal, BasicBlock *IfException,
591- ArrayRef<Value *> Args,
592- Instruction *InsertBefore, Context &Ctx,
593- const Twine &NameStr) {
594- return create (FTy, Func, IfNormal, IfException, Args,
595- InsertBefore->getIterator (), InsertBefore->getParent (), Ctx,
596- NameStr);
597- }
598-
599- InvokeInst *InvokeInst::create (FunctionType *FTy, Value *Func,
600- BasicBlock *IfNormal, BasicBlock *IfException,
601- ArrayRef<Value *> Args, BasicBlock *InsertAtEnd,
602- Context &Ctx, const Twine &NameStr) {
603- return create (FTy, Func, IfNormal, IfException, Args, InsertAtEnd->end (),
604- InsertAtEnd, Ctx, NameStr);
605- }
606-
607545BasicBlock *InvokeInst::getNormalDest () const {
608546 return cast<BasicBlock>(
609547 Ctx.getValue (cast<llvm::InvokeInst>(Val)->getNormalDest ()));
@@ -633,15 +571,9 @@ BasicBlock *InvokeInst::getSuccessor(unsigned SuccIdx) const {
633571CallBrInst *CallBrInst::create (FunctionType *FTy, Value *Func,
634572 BasicBlock *DefaultDest,
635573 ArrayRef<BasicBlock *> IndirectDests,
636- ArrayRef<Value *> Args, BBIterator WhereIt,
637- BasicBlock *WhereBB, Context &Ctx,
638- const Twine &NameStr) {
639- auto &Builder = Ctx.getLLVMIRBuilder ();
640- if (WhereIt != WhereBB->end ())
641- Builder.SetInsertPoint ((*WhereIt).getTopmostLLVMInstruction ());
642- else
643- Builder.SetInsertPoint (cast<llvm::BasicBlock>(WhereBB->Val ));
644-
574+ ArrayRef<Value *> Args, InsertPosition Pos,
575+ Context &Ctx, const Twine &NameStr) {
576+ auto &Builder = setInsertPos (Pos);
645577 SmallVector<llvm::BasicBlock *> LLVMIndirectDests;
646578 LLVMIndirectDests.reserve (IndirectDests.size ());
647579 for (BasicBlock *IndDest : IndirectDests)
@@ -659,25 +591,6 @@ CallBrInst *CallBrInst::create(FunctionType *FTy, Value *Func,
659591 return Ctx.createCallBrInst (CallBr);
660592}
661593
662- CallBrInst *CallBrInst::create (FunctionType *FTy, Value *Func,
663- BasicBlock *DefaultDest,
664- ArrayRef<BasicBlock *> IndirectDests,
665- ArrayRef<Value *> Args,
666- Instruction *InsertBefore, Context &Ctx,
667- const Twine &NameStr) {
668- return create (FTy, Func, DefaultDest, IndirectDests, Args,
669- InsertBefore->getIterator (), InsertBefore->getParent (), Ctx,
670- NameStr);
671- }
672- CallBrInst *CallBrInst::create (FunctionType *FTy, Value *Func,
673- BasicBlock *DefaultDest,
674- ArrayRef<BasicBlock *> IndirectDests,
675- ArrayRef<Value *> Args, BasicBlock *InsertAtEnd,
676- Context &Ctx, const Twine &NameStr) {
677- return create (FTy, Func, DefaultDest, IndirectDests, Args, InsertAtEnd->end (),
678- InsertAtEnd, Ctx, NameStr);
679- }
680-
681594Value *CallBrInst::getIndirectDestLabel (unsigned Idx) const {
682595 return Ctx.getValue (cast<llvm::CallBrInst>(Val)->getIndirectDestLabel (Idx));
683596}
@@ -720,13 +633,9 @@ BasicBlock *CallBrInst::getSuccessor(unsigned Idx) const {
720633}
721634
722635LandingPadInst *LandingPadInst::create (Type *RetTy, unsigned NumReservedClauses,
723- BBIterator WhereIt, BasicBlock *WhereBB,
724- Context &Ctx, const Twine &Name) {
725- auto &Builder = Ctx.getLLVMIRBuilder ();
726- if (WhereIt != WhereBB->end ())
727- Builder.SetInsertPoint ((*WhereIt).getTopmostLLVMInstruction ());
728- else
729- Builder.SetInsertPoint (cast<llvm::BasicBlock>(WhereBB->Val ));
636+ InsertPosition Pos, Context &Ctx,
637+ const Twine &Name) {
638+ auto &Builder = setInsertPos (Pos);
730639 llvm::LandingPadInst *LLVMI =
731640 Builder.CreateLandingPad (RetTy->LLVMTy , NumReservedClauses, Name);
732641 return Ctx.createLandingPadInst (LLVMI);
@@ -773,13 +682,9 @@ CatchSwitchInst *CatchPadInst::getCatchSwitch() const {
773682}
774683
775684CatchPadInst *CatchPadInst::create (Value *ParentPad, ArrayRef<Value *> Args,
776- BBIterator WhereIt, BasicBlock *WhereBB,
777- Context &Ctx, const Twine &Name) {
778- auto &Builder = Ctx.getLLVMIRBuilder ();
779- if (WhereIt != WhereBB->end ())
780- Builder.SetInsertPoint ((*WhereIt).getTopmostLLVMInstruction ());
781- else
782- Builder.SetInsertPoint (cast<llvm::BasicBlock>(WhereBB->Val ));
685+ InsertPosition Pos, Context &Ctx,
686+ const Twine &Name) {
687+ auto &Builder = setInsertPos (Pos);
783688 SmallVector<llvm::Value *> LLVMArgs;
784689 LLVMArgs.reserve (Args.size ());
785690 for (auto *Arg : Args)
@@ -790,13 +695,9 @@ CatchPadInst *CatchPadInst::create(Value *ParentPad, ArrayRef<Value *> Args,
790695}
791696
792697CleanupPadInst *CleanupPadInst::create (Value *ParentPad, ArrayRef<Value *> Args,
793- BBIterator WhereIt, BasicBlock *WhereBB,
794- Context &Ctx, const Twine &Name) {
795- auto &Builder = Ctx.getLLVMIRBuilder ();
796- if (WhereIt != WhereBB->end ())
797- Builder.SetInsertPoint ((*WhereIt).getTopmostLLVMInstruction ());
798- else
799- Builder.SetInsertPoint (cast<llvm::BasicBlock>(WhereBB->Val ));
698+ InsertPosition Pos, Context &Ctx,
699+ const Twine &Name) {
700+ auto &Builder = setInsertPos (Pos);
800701 SmallVector<llvm::Value *> LLVMArgs;
801702 LLVMArgs.reserve (Args.size ());
802703 for (auto *Arg : Args)
0 commit comments