@@ -960,20 +960,15 @@ DILexicalBlock *DIBuilder::createLexicalBlock(DIScope *Scope, DIFile *File,
960960 File, Line, Col);
961961}
962962
963- DbgInstPtr DIBuilder::insertDeclare (Value *Storage, DILocalVariable *VarInfo,
964- DIExpression *Expr, const DILocation *DL,
965- Instruction *InsertBefore) {
966- return insertDeclare (Storage, VarInfo, Expr, DL, InsertBefore->getParent (),
967- InsertBefore);
968- }
969-
970963DbgInstPtr DIBuilder::insertDeclare (Value *Storage, DILocalVariable *VarInfo,
971964 DIExpression *Expr, const DILocation *DL,
972965 BasicBlock *InsertAtEnd) {
973966 // If this block already has a terminator then insert this intrinsic before
974967 // the terminator. Otherwise, put it at the end of the block.
975968 Instruction *InsertBefore = InsertAtEnd->getTerminator ();
976- return insertDeclare (Storage, VarInfo, Expr, DL, InsertAtEnd, InsertBefore);
969+ return insertDeclare (Storage, VarInfo, Expr, DL,
970+ InsertBefore ? InsertBefore->getIterator ()
971+ : InsertAtEnd->end ());
977972}
978973
979974DbgInstPtr DIBuilder::insertDbgAssign (Instruction *LinkedInstr, Value *Val,
@@ -988,11 +983,10 @@ DbgInstPtr DIBuilder::insertDbgAssign(Instruction *LinkedInstr, Value *Val,
988983 if (M.IsNewDbgInfoFormat ) {
989984 DbgVariableRecord *DVR = DbgVariableRecord::createDVRAssign (
990985 Val, SrcVar, ValExpr, Link, Addr, AddrExpr, DL);
991- BasicBlock *InsertBB = LinkedInstr->getParent ();
992986 // Insert after LinkedInstr.
993987 BasicBlock::iterator NextIt = std::next (LinkedInstr->getIterator ());
994- Instruction *InsertBefore = NextIt == InsertBB-> end () ? nullptr : &*NextIt ;
995- insertDbgVariableRecord (DVR, InsertBB, InsertBefore, true );
988+ NextIt. setHeadBit ( true ) ;
989+ insertDbgVariableRecord (DVR, NextIt );
996990 return DVR;
997991 }
998992
@@ -1018,47 +1012,11 @@ DbgInstPtr DIBuilder::insertDbgAssign(Instruction *LinkedInstr, Value *Val,
10181012 return DVI;
10191013}
10201014
1021- DbgInstPtr DIBuilder::insertLabel (DILabel *LabelInfo, const DILocation *DL,
1022- Instruction *InsertBefore) {
1023- return insertLabel (LabelInfo, DL,
1024- InsertBefore ? InsertBefore->getParent () : nullptr ,
1025- InsertBefore);
1026- }
1027-
1028- DbgInstPtr DIBuilder::insertLabel (DILabel *LabelInfo, const DILocation *DL,
1029- BasicBlock *InsertAtEnd) {
1030- return insertLabel (LabelInfo, DL, InsertAtEnd, nullptr );
1031- }
1032-
1033- DbgInstPtr DIBuilder::insertDbgValueIntrinsic (Value *V,
1034- DILocalVariable *VarInfo,
1035- DIExpression *Expr,
1036- const DILocation *DL,
1037- Instruction *InsertBefore) {
1038- DbgInstPtr DVI = insertDbgValueIntrinsic (
1039- V, VarInfo, Expr, DL, InsertBefore ? InsertBefore->getParent () : nullptr ,
1040- InsertBefore);
1041- if (auto *Inst = dyn_cast<Instruction *>(DVI))
1042- cast<CallInst>(Inst)->setTailCall ();
1043- return DVI;
1044- }
1045-
1046- DbgInstPtr DIBuilder::insertDbgValueIntrinsic (Value *V,
1047- DILocalVariable *VarInfo,
1048- DIExpression *Expr,
1049- const DILocation *DL,
1050- BasicBlock *InsertAtEnd) {
1051- return insertDbgValueIntrinsic (V, VarInfo, Expr, DL, InsertAtEnd, nullptr );
1052- }
1053-
10541015// / Initialize IRBuilder for inserting dbg.declare and dbg.value intrinsics.
10551016// / This abstracts over the various ways to specify an insert position.
10561017static void initIRBuilder (IRBuilder<> &Builder, const DILocation *DL,
1057- BasicBlock *InsertBB, Instruction *InsertBefore) {
1058- if (InsertBefore)
1059- Builder.SetInsertPoint (InsertBefore);
1060- else if (InsertBB)
1061- Builder.SetInsertPoint (InsertBB);
1018+ InsertPosition InsertPt) {
1019+ Builder.SetInsertPoint (InsertPt.getBasicBlock (), InsertPt);
10621020 Builder.SetCurrentDebugLocation (DL);
10631021}
10641022
@@ -1071,26 +1029,28 @@ static Function *getDeclareIntrin(Module &M) {
10711029 return Intrinsic::getOrInsertDeclaration (&M, Intrinsic::dbg_declare);
10721030}
10731031
1074- DbgInstPtr DIBuilder::insertDbgValueIntrinsic (
1075- llvm::Value *Val, DILocalVariable *VarInfo, DIExpression *Expr,
1076- const DILocation *DL, BasicBlock *InsertBB, Instruction *InsertBefore) {
1032+ DbgInstPtr DIBuilder::insertDbgValueIntrinsic (llvm::Value *Val,
1033+ DILocalVariable *VarInfo,
1034+ DIExpression *Expr,
1035+ const DILocation *DL,
1036+ InsertPosition InsertPt) {
10771037 if (M.IsNewDbgInfoFormat ) {
10781038 DbgVariableRecord *DVR =
10791039 DbgVariableRecord::createDbgVariableRecord (Val, VarInfo, Expr, DL);
1080- insertDbgVariableRecord (DVR, InsertBB, InsertBefore );
1040+ insertDbgVariableRecord (DVR, InsertPt );
10811041 return DVR;
10821042 }
10831043
10841044 if (!ValueFn)
10851045 ValueFn = Intrinsic::getOrInsertDeclaration (&M, Intrinsic::dbg_value);
1086- return insertDbgIntrinsic (ValueFn, Val, VarInfo, Expr, DL, InsertBB,
1087- InsertBefore);
1046+ auto *DVI = insertDbgIntrinsic (ValueFn, Val, VarInfo, Expr, DL, InsertPt);
1047+ cast<CallInst>(DVI)->setTailCall ();
1048+ return DVI;
10881049}
10891050
10901051DbgInstPtr DIBuilder::insertDeclare (Value *Storage, DILocalVariable *VarInfo,
10911052 DIExpression *Expr, const DILocation *DL,
1092- BasicBlock *InsertBB,
1093- Instruction *InsertBefore) {
1053+ InsertPosition InsertPt) {
10941054 assert (VarInfo && " empty or invalid DILocalVariable* passed to dbg.declare" );
10951055 assert (DL && " Expected debug loc" );
10961056 assert (DL->getScope ()->getSubprogram () ==
@@ -1100,7 +1060,7 @@ DbgInstPtr DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
11001060 if (M.IsNewDbgInfoFormat ) {
11011061 DbgVariableRecord *DVR =
11021062 DbgVariableRecord::createDVRDeclare (Storage, VarInfo, Expr, DL);
1103- insertDbgVariableRecord (DVR, InsertBB, InsertBefore );
1063+ insertDbgVariableRecord (DVR, InsertPt );
11041064 return DVR;
11051065 }
11061066
@@ -1114,35 +1074,27 @@ DbgInstPtr DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
11141074 MetadataAsValue::get (VMContext, Expr)};
11151075
11161076 IRBuilder<> B (DL->getContext ());
1117- initIRBuilder (B, DL, InsertBB, InsertBefore );
1077+ initIRBuilder (B, DL, InsertPt );
11181078 return B.CreateCall (DeclareFn, Args);
11191079}
11201080
11211081void DIBuilder::insertDbgVariableRecord (DbgVariableRecord *DVR,
1122- BasicBlock *InsertBB,
1123- Instruction *InsertBefore,
1124- bool InsertAtHead) {
1125- assert (InsertBefore || InsertBB);
1082+ InsertPosition InsertPt) {
1083+ assert (InsertPt.isValid ());
11261084 trackIfUnresolved (DVR->getVariable ());
11271085 trackIfUnresolved (DVR->getExpression ());
11281086 if (DVR->isDbgAssign ())
11291087 trackIfUnresolved (DVR->getAddressExpression ());
11301088
1131- BasicBlock::iterator InsertPt;
1132- if (InsertBB && InsertBefore)
1133- InsertPt = InsertBefore->getIterator ();
1134- else if (InsertBB)
1135- InsertPt = InsertBB->end ();
1136- InsertPt.setHeadBit (InsertAtHead);
1137- InsertBB->insertDbgRecordBefore (DVR, InsertPt);
1089+ auto *BB = InsertPt.getBasicBlock ();
1090+ BB->insertDbgRecordBefore (DVR, InsertPt);
11381091}
11391092
11401093Instruction *DIBuilder::insertDbgIntrinsic (llvm::Function *IntrinsicFn,
11411094 Value *V, DILocalVariable *VarInfo,
11421095 DIExpression *Expr,
11431096 const DILocation *DL,
1144- BasicBlock *InsertBB,
1145- Instruction *InsertBefore) {
1097+ InsertPosition InsertPt) {
11461098 assert (IntrinsicFn && " must pass a non-null intrinsic function" );
11471099 assert (V && " must pass a value to a dbg intrinsic" );
11481100 assert (VarInfo &&
@@ -1159,13 +1111,12 @@ Instruction *DIBuilder::insertDbgIntrinsic(llvm::Function *IntrinsicFn,
11591111 MetadataAsValue::get (VMContext, Expr)};
11601112
11611113 IRBuilder<> B (DL->getContext ());
1162- initIRBuilder (B, DL, InsertBB, InsertBefore );
1114+ initIRBuilder (B, DL, InsertPt );
11631115 return B.CreateCall (IntrinsicFn, Args);
11641116}
11651117
11661118DbgInstPtr DIBuilder::insertLabel (DILabel *LabelInfo, const DILocation *DL,
1167- BasicBlock *InsertBB,
1168- Instruction *InsertBefore) {
1119+ InsertPosition InsertPt) {
11691120 assert (LabelInfo && " empty or invalid DILabel* passed to dbg.label" );
11701121 assert (DL && " Expected debug loc" );
11711122 assert (DL->getScope ()->getSubprogram () ==
@@ -1175,10 +1126,10 @@ DbgInstPtr DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
11751126 trackIfUnresolved (LabelInfo);
11761127 if (M.IsNewDbgInfoFormat ) {
11771128 DbgLabelRecord *DLR = new DbgLabelRecord (LabelInfo, DL);
1178- if (InsertBB && InsertBefore)
1179- InsertBB-> insertDbgRecordBefore (DLR, InsertBefore-> getIterator () );
1180- else if (InsertBB)
1181- InsertBB-> insertDbgRecordBefore (DLR, InsertBB-> end ());
1129+ if (InsertPt. isValid ()) {
1130+ auto *BB = InsertPt. getBasicBlock ( );
1131+ BB-> insertDbgRecordBefore (DLR, InsertPt);
1132+ }
11821133 return DLR;
11831134 }
11841135
@@ -1188,7 +1139,7 @@ DbgInstPtr DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
11881139 Value *Args[] = {MetadataAsValue::get (VMContext, LabelInfo)};
11891140
11901141 IRBuilder<> B (DL->getContext ());
1191- initIRBuilder (B, DL, InsertBB, InsertBefore );
1142+ initIRBuilder (B, DL, InsertPt );
11921143 return B.CreateCall (LabelFn, Args);
11931144}
11941145
0 commit comments