@@ -959,22 +959,6 @@ DILexicalBlock *DIBuilder::createLexicalBlock(DIScope *Scope, DIFile *File,
959959 File, Line, Col);
960960}
961961
962- DbgInstPtr DIBuilder::insertDeclare (Value *Storage, DILocalVariable *VarInfo,
963- DIExpression *Expr, const DILocation *DL,
964- Instruction *InsertBefore) {
965- return insertDeclare (Storage, VarInfo, Expr, DL, InsertBefore->getParent (),
966- InsertBefore);
967- }
968-
969- DbgInstPtr DIBuilder::insertDeclare (Value *Storage, DILocalVariable *VarInfo,
970- DIExpression *Expr, const DILocation *DL,
971- BasicBlock *InsertAtEnd) {
972- // If this block already has a terminator then insert this intrinsic before
973- // the terminator. Otherwise, put it at the end of the block.
974- Instruction *InsertBefore = InsertAtEnd->getTerminator ();
975- return insertDeclare (Storage, VarInfo, Expr, DL, InsertAtEnd, InsertBefore);
976- }
977-
978962DbgInstPtr DIBuilder::insertDbgAssign (Instruction *LinkedInstr, Value *Val,
979963 DILocalVariable *SrcVar,
980964 DIExpression *ValExpr, Value *Addr,
@@ -987,11 +971,10 @@ DbgInstPtr DIBuilder::insertDbgAssign(Instruction *LinkedInstr, Value *Val,
987971 if (M.IsNewDbgInfoFormat ) {
988972 DbgVariableRecord *DVR = DbgVariableRecord::createDVRAssign (
989973 Val, SrcVar, ValExpr, Link, Addr, AddrExpr, DL);
990- BasicBlock *InsertBB = LinkedInstr->getParent ();
991974 // Insert after LinkedInstr.
992975 BasicBlock::iterator NextIt = std::next (LinkedInstr->getIterator ());
993- Instruction *InsertBefore = NextIt == InsertBB-> end () ? nullptr : &*NextIt ;
994- insertDbgVariableRecord (DVR, InsertBB, InsertBefore, true );
976+ NextIt. setHeadBit ( true ) ;
977+ insertDbgVariableRecord (DVR, NextIt );
995978 return DVR;
996979 }
997980
@@ -1017,47 +1000,11 @@ DbgInstPtr DIBuilder::insertDbgAssign(Instruction *LinkedInstr, Value *Val,
10171000 return DVI;
10181001}
10191002
1020- DbgInstPtr DIBuilder::insertLabel (DILabel *LabelInfo, const DILocation *DL,
1021- Instruction *InsertBefore) {
1022- return insertLabel (LabelInfo, DL,
1023- InsertBefore ? InsertBefore->getParent () : nullptr ,
1024- InsertBefore);
1025- }
1026-
1027- DbgInstPtr DIBuilder::insertLabel (DILabel *LabelInfo, const DILocation *DL,
1028- BasicBlock *InsertAtEnd) {
1029- return insertLabel (LabelInfo, DL, InsertAtEnd, nullptr );
1030- }
1031-
1032- DbgInstPtr DIBuilder::insertDbgValueIntrinsic (Value *V,
1033- DILocalVariable *VarInfo,
1034- DIExpression *Expr,
1035- const DILocation *DL,
1036- Instruction *InsertBefore) {
1037- DbgInstPtr DVI = insertDbgValueIntrinsic (
1038- V, VarInfo, Expr, DL, InsertBefore ? InsertBefore->getParent () : nullptr ,
1039- InsertBefore);
1040- if (auto *Inst = dyn_cast<Instruction *>(DVI))
1041- cast<CallInst>(Inst)->setTailCall ();
1042- return DVI;
1043- }
1044-
1045- DbgInstPtr DIBuilder::insertDbgValueIntrinsic (Value *V,
1046- DILocalVariable *VarInfo,
1047- DIExpression *Expr,
1048- const DILocation *DL,
1049- BasicBlock *InsertAtEnd) {
1050- return insertDbgValueIntrinsic (V, VarInfo, Expr, DL, InsertAtEnd, nullptr );
1051- }
1052-
10531003// / Initialize IRBuilder for inserting dbg.declare and dbg.value intrinsics.
10541004// / This abstracts over the various ways to specify an insert position.
10551005static void initIRBuilder (IRBuilder<> &Builder, const DILocation *DL,
1056- BasicBlock *InsertBB, Instruction *InsertBefore) {
1057- if (InsertBefore)
1058- Builder.SetInsertPoint (InsertBefore);
1059- else if (InsertBB)
1060- Builder.SetInsertPoint (InsertBB);
1006+ InsertPosition InsertPt) {
1007+ Builder.SetInsertPoint (InsertPt.getBasicBlock (), InsertPt);
10611008 Builder.SetCurrentDebugLocation (DL);
10621009}
10631010
@@ -1070,26 +1017,28 @@ static Function *getDeclareIntrin(Module &M) {
10701017 return Intrinsic::getOrInsertDeclaration (&M, Intrinsic::dbg_declare);
10711018}
10721019
1073- DbgInstPtr DIBuilder::insertDbgValueIntrinsic (
1074- llvm::Value *Val, DILocalVariable *VarInfo, DIExpression *Expr,
1075- const DILocation *DL, BasicBlock *InsertBB, Instruction *InsertBefore) {
1020+ DbgInstPtr DIBuilder::insertDbgValueIntrinsic (llvm::Value *Val,
1021+ DILocalVariable *VarInfo,
1022+ DIExpression *Expr,
1023+ const DILocation *DL,
1024+ InsertPosition InsertPt) {
10761025 if (M.IsNewDbgInfoFormat ) {
10771026 DbgVariableRecord *DVR =
10781027 DbgVariableRecord::createDbgVariableRecord (Val, VarInfo, Expr, DL);
1079- insertDbgVariableRecord (DVR, InsertBB, InsertBefore );
1028+ insertDbgVariableRecord (DVR, InsertPt );
10801029 return DVR;
10811030 }
10821031
10831032 if (!ValueFn)
10841033 ValueFn = Intrinsic::getOrInsertDeclaration (&M, Intrinsic::dbg_value);
1085- return insertDbgIntrinsic (ValueFn, Val, VarInfo, Expr, DL, InsertBB,
1086- InsertBefore);
1034+ auto *DVI = insertDbgIntrinsic (ValueFn, Val, VarInfo, Expr, DL, InsertPt);
1035+ cast<CallInst>(DVI)->setTailCall ();
1036+ return DVI;
10871037}
10881038
10891039DbgInstPtr DIBuilder::insertDeclare (Value *Storage, DILocalVariable *VarInfo,
10901040 DIExpression *Expr, const DILocation *DL,
1091- BasicBlock *InsertBB,
1092- Instruction *InsertBefore) {
1041+ InsertPosition InsertPt) {
10931042 assert (VarInfo && " empty or invalid DILocalVariable* passed to dbg.declare" );
10941043 assert (DL && " Expected debug loc" );
10951044 assert (DL->getScope ()->getSubprogram () ==
@@ -1099,7 +1048,7 @@ DbgInstPtr DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
10991048 if (M.IsNewDbgInfoFormat ) {
11001049 DbgVariableRecord *DVR =
11011050 DbgVariableRecord::createDVRDeclare (Storage, VarInfo, Expr, DL);
1102- insertDbgVariableRecord (DVR, InsertBB, InsertBefore );
1051+ insertDbgVariableRecord (DVR, InsertPt );
11031052 return DVR;
11041053 }
11051054
@@ -1113,35 +1062,27 @@ DbgInstPtr DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
11131062 MetadataAsValue::get (VMContext, Expr)};
11141063
11151064 IRBuilder<> B (DL->getContext ());
1116- initIRBuilder (B, DL, InsertBB, InsertBefore );
1065+ initIRBuilder (B, DL, InsertPt );
11171066 return B.CreateCall (DeclareFn, Args);
11181067}
11191068
11201069void DIBuilder::insertDbgVariableRecord (DbgVariableRecord *DVR,
1121- BasicBlock *InsertBB,
1122- Instruction *InsertBefore,
1123- bool InsertAtHead) {
1124- assert (InsertBefore || InsertBB);
1070+ InsertPosition InsertPt) {
1071+ assert (InsertPt.isValid ());
11251072 trackIfUnresolved (DVR->getVariable ());
11261073 trackIfUnresolved (DVR->getExpression ());
11271074 if (DVR->isDbgAssign ())
11281075 trackIfUnresolved (DVR->getAddressExpression ());
11291076
1130- BasicBlock::iterator InsertPt;
1131- if (InsertBB && InsertBefore)
1132- InsertPt = InsertBefore->getIterator ();
1133- else if (InsertBB)
1134- InsertPt = InsertBB->end ();
1135- InsertPt.setHeadBit (InsertAtHead);
1136- InsertBB->insertDbgRecordBefore (DVR, InsertPt);
1077+ auto *BB = InsertPt.getBasicBlock ();
1078+ BB->insertDbgRecordBefore (DVR, InsertPt);
11371079}
11381080
11391081Instruction *DIBuilder::insertDbgIntrinsic (llvm::Function *IntrinsicFn,
11401082 Value *V, DILocalVariable *VarInfo,
11411083 DIExpression *Expr,
11421084 const DILocation *DL,
1143- BasicBlock *InsertBB,
1144- Instruction *InsertBefore) {
1085+ InsertPosition InsertPt) {
11451086 assert (IntrinsicFn && " must pass a non-null intrinsic function" );
11461087 assert (V && " must pass a value to a dbg intrinsic" );
11471088 assert (VarInfo &&
@@ -1158,13 +1099,12 @@ Instruction *DIBuilder::insertDbgIntrinsic(llvm::Function *IntrinsicFn,
11581099 MetadataAsValue::get (VMContext, Expr)};
11591100
11601101 IRBuilder<> B (DL->getContext ());
1161- initIRBuilder (B, DL, InsertBB, InsertBefore );
1102+ initIRBuilder (B, DL, InsertPt );
11621103 return B.CreateCall (IntrinsicFn, Args);
11631104}
11641105
11651106DbgInstPtr DIBuilder::insertLabel (DILabel *LabelInfo, const DILocation *DL,
1166- BasicBlock *InsertBB,
1167- Instruction *InsertBefore) {
1107+ InsertPosition InsertPt) {
11681108 assert (LabelInfo && " empty or invalid DILabel* passed to dbg.label" );
11691109 assert (DL && " Expected debug loc" );
11701110 assert (DL->getScope ()->getSubprogram () ==
@@ -1174,10 +1114,10 @@ DbgInstPtr DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
11741114 trackIfUnresolved (LabelInfo);
11751115 if (M.IsNewDbgInfoFormat ) {
11761116 DbgLabelRecord *DLR = new DbgLabelRecord (LabelInfo, DL);
1177- if (InsertBB && InsertBefore)
1178- InsertBB-> insertDbgRecordBefore (DLR, InsertBefore-> getIterator () );
1179- else if (InsertBB)
1180- InsertBB-> insertDbgRecordBefore (DLR, InsertBB-> end ());
1117+ if (InsertPt. isValid ()) {
1118+ auto *BB = InsertPt. getBasicBlock ( );
1119+ BB-> insertDbgRecordBefore (DLR, InsertPt);
1120+ }
11811121 return DLR;
11821122 }
11831123
@@ -1187,7 +1127,7 @@ DbgInstPtr DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
11871127 Value *Args[] = {MetadataAsValue::get (VMContext, LabelInfo)};
11881128
11891129 IRBuilder<> B (DL->getContext ());
1190- initIRBuilder (B, DL, InsertBB, InsertBefore );
1130+ initIRBuilder (B, DL, InsertPt );
11911131 return B.CreateCall (LabelFn, Args);
11921132}
11931133
0 commit comments