xref: /freebsd/contrib/llvm-project/llvm/lib/IR/BasicBlock.cpp (revision c80e69b00d976a5a3b3e84527f270fa7e72a8205)
1 //===-- BasicBlock.cpp - Implement BasicBlock related methods -------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the BasicBlock class for the IR library.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/IR/BasicBlock.h"
14 #include "SymbolTableListTraitsImpl.h"
15 #include "llvm/ADT/STLExtras.h"
16 #include "llvm/ADT/Statistic.h"
17 #include "llvm/IR/CFG.h"
18 #include "llvm/IR/Constants.h"
19 #include "llvm/IR/DebugProgramInstruction.h"
20 #include "llvm/IR/Instructions.h"
21 #include "llvm/IR/IntrinsicInst.h"
22 #include "llvm/IR/LLVMContext.h"
23 #include "llvm/IR/Type.h"
24 #include "llvm/Support/CommandLine.h"
25 
26 #include "LLVMContextImpl.h"
27 
28 using namespace llvm;
29 
30 #define DEBUG_TYPE "ir"
31 STATISTIC(NumInstrRenumberings, "Number of renumberings across all blocks");
32 
33 cl::opt<bool> UseNewDbgInfoFormat(
34     "experimental-debuginfo-iterators",
35     cl::desc("Enable communicating debuginfo positions through iterators, "
36              "eliminating intrinsics. Has no effect if "
37              "--preserve-input-debuginfo-format=true."),
38     cl::init(true));
39 cl::opt<cl::boolOrDefault> PreserveInputDbgFormat(
40     "preserve-input-debuginfo-format", cl::Hidden,
41     cl::desc("When set to true, IR files will be processed and printed in "
42              "their current debug info format, regardless of default behaviour "
43              "or other flags passed. Has no effect if input IR does not "
44              "contain debug records or intrinsics. Ignored in llvm-link, "
45              "llvm-lto, and llvm-lto2."));
46 
47 bool WriteNewDbgInfoFormatToBitcode /*set default value in cl::init() below*/;
48 cl::opt<bool, true> WriteNewDbgInfoFormatToBitcode2(
49     "write-experimental-debuginfo-iterators-to-bitcode", cl::Hidden,
50     cl::location(WriteNewDbgInfoFormatToBitcode), cl::init(true));
51 
createMarker(Instruction * I)52 DbgMarker *BasicBlock::createMarker(Instruction *I) {
53   assert(IsNewDbgInfoFormat &&
54          "Tried to create a marker in a non new debug-info block!");
55   if (I->DebugMarker)
56     return I->DebugMarker;
57   DbgMarker *Marker = new DbgMarker();
58   Marker->MarkedInstr = I;
59   I->DebugMarker = Marker;
60   return Marker;
61 }
62 
createMarker(InstListType::iterator It)63 DbgMarker *BasicBlock::createMarker(InstListType::iterator It) {
64   assert(IsNewDbgInfoFormat &&
65          "Tried to create a marker in a non new debug-info block!");
66   if (It != end())
67     return createMarker(&*It);
68   DbgMarker *DM = getTrailingDbgRecords();
69   if (DM)
70     return DM;
71   DM = new DbgMarker();
72   setTrailingDbgRecords(DM);
73   return DM;
74 }
75 
convertToNewDbgValues()76 void BasicBlock::convertToNewDbgValues() {
77   IsNewDbgInfoFormat = true;
78 
79   // Iterate over all instructions in the instruction list, collecting debug
80   // info intrinsics and converting them to DbgRecords. Once we find a "real"
81   // instruction, attach all those DbgRecords to a DbgMarker in that
82   // instruction.
83   SmallVector<DbgRecord *, 4> DbgVarRecs;
84   for (Instruction &I : make_early_inc_range(InstList)) {
85     assert(!I.DebugMarker && "DebugMarker already set on old-format instrs?");
86     if (DbgVariableIntrinsic *DVI = dyn_cast<DbgVariableIntrinsic>(&I)) {
87       // Convert this dbg.value to a DbgVariableRecord.
88       DbgVariableRecord *Value = new DbgVariableRecord(DVI);
89       DbgVarRecs.push_back(Value);
90       DVI->eraseFromParent();
91       continue;
92     }
93 
94     if (DbgLabelInst *DLI = dyn_cast<DbgLabelInst>(&I)) {
95       DbgVarRecs.push_back(
96           new DbgLabelRecord(DLI->getLabel(), DLI->getDebugLoc()));
97       DLI->eraseFromParent();
98       continue;
99     }
100 
101     if (DbgVarRecs.empty())
102       continue;
103 
104     // Create a marker to store DbgRecords in.
105     createMarker(&I);
106     DbgMarker *Marker = I.DebugMarker;
107 
108     for (DbgRecord *DVR : DbgVarRecs)
109       Marker->insertDbgRecord(DVR, false);
110 
111     DbgVarRecs.clear();
112   }
113 }
114 
convertFromNewDbgValues()115 void BasicBlock::convertFromNewDbgValues() {
116   invalidateOrders();
117   IsNewDbgInfoFormat = false;
118 
119   // Iterate over the block, finding instructions annotated with DbgMarkers.
120   // Convert any attached DbgRecords to debug intrinsics and insert ahead of the
121   // instruction.
122   for (auto &Inst : *this) {
123     if (!Inst.DebugMarker)
124       continue;
125 
126     DbgMarker &Marker = *Inst.DebugMarker;
127     for (DbgRecord &DR : Marker.getDbgRecordRange())
128       InstList.insert(Inst.getIterator(),
129                       DR.createDebugIntrinsic(getModule(), nullptr));
130 
131     Marker.eraseFromParent();
132   }
133 
134   // Assume no trailing DbgRecords: we could technically create them at the end
135   // of the block, after a terminator, but this would be non-cannonical and
136   // indicates that something else is broken somewhere.
137   assert(!getTrailingDbgRecords());
138 }
139 
140 #ifndef NDEBUG
dumpDbgValues() const141 void BasicBlock::dumpDbgValues() const {
142   for (auto &Inst : *this) {
143     if (!Inst.DebugMarker)
144       continue;
145 
146     dbgs() << "@ " << Inst.DebugMarker << " ";
147     Inst.DebugMarker->dump();
148   };
149 }
150 #endif
151 
setIsNewDbgInfoFormat(bool NewFlag)152 void BasicBlock::setIsNewDbgInfoFormat(bool NewFlag) {
153   if (NewFlag && !IsNewDbgInfoFormat)
154     convertToNewDbgValues();
155   else if (!NewFlag && IsNewDbgInfoFormat)
156     convertFromNewDbgValues();
157 }
setNewDbgInfoFormatFlag(bool NewFlag)158 void BasicBlock::setNewDbgInfoFormatFlag(bool NewFlag) {
159   IsNewDbgInfoFormat = NewFlag;
160 }
161 
getValueSymbolTable()162 ValueSymbolTable *BasicBlock::getValueSymbolTable() {
163   if (Function *F = getParent())
164     return F->getValueSymbolTable();
165   return nullptr;
166 }
167 
getContext() const168 LLVMContext &BasicBlock::getContext() const {
169   return getType()->getContext();
170 }
171 
invalidateParentIListOrdering(BasicBlock * BB)172 template <> void llvm::invalidateParentIListOrdering(BasicBlock *BB) {
173   BB->invalidateOrders();
174 }
175 
176 // Explicit instantiation of SymbolTableListTraits since some of the methods
177 // are not in the public header file...
178 template class llvm::SymbolTableListTraits<
179     Instruction, ilist_iterator_bits<true>, ilist_parent<BasicBlock>>;
180 
BasicBlock(LLVMContext & C,const Twine & Name,Function * NewParent,BasicBlock * InsertBefore)181 BasicBlock::BasicBlock(LLVMContext &C, const Twine &Name, Function *NewParent,
182                        BasicBlock *InsertBefore)
183     : Value(Type::getLabelTy(C), Value::BasicBlockVal),
184       IsNewDbgInfoFormat(UseNewDbgInfoFormat), Parent(nullptr) {
185 
186   if (NewParent)
187     insertInto(NewParent, InsertBefore);
188   else
189     assert(!InsertBefore &&
190            "Cannot insert block before another block with no function!");
191 
192   end().getNodePtr()->setParent(this);
193   setName(Name);
194   if (NewParent)
195     setIsNewDbgInfoFormat(NewParent->IsNewDbgInfoFormat);
196 }
197 
insertInto(Function * NewParent,BasicBlock * InsertBefore)198 void BasicBlock::insertInto(Function *NewParent, BasicBlock *InsertBefore) {
199   assert(NewParent && "Expected a parent");
200   assert(!Parent && "Already has a parent");
201 
202   if (InsertBefore)
203     NewParent->insert(InsertBefore->getIterator(), this);
204   else
205     NewParent->insert(NewParent->end(), this);
206 
207   setIsNewDbgInfoFormat(NewParent->IsNewDbgInfoFormat);
208 }
209 
~BasicBlock()210 BasicBlock::~BasicBlock() {
211   validateInstrOrdering();
212 
213   // If the address of the block is taken and it is being deleted (e.g. because
214   // it is dead), this means that there is either a dangling constant expr
215   // hanging off the block, or an undefined use of the block (source code
216   // expecting the address of a label to keep the block alive even though there
217   // is no indirect branch).  Handle these cases by zapping the BlockAddress
218   // nodes.  There are no other possible uses at this point.
219   if (hasAddressTaken()) {
220     assert(!use_empty() && "There should be at least one blockaddress!");
221     Constant *Replacement =
222       ConstantInt::get(llvm::Type::getInt32Ty(getContext()), 1);
223     while (!use_empty()) {
224       BlockAddress *BA = cast<BlockAddress>(user_back());
225       BA->replaceAllUsesWith(ConstantExpr::getIntToPtr(Replacement,
226                                                        BA->getType()));
227       BA->destroyConstant();
228     }
229   }
230 
231   assert(getParent() == nullptr && "BasicBlock still linked into the program!");
232   dropAllReferences();
233   for (auto &Inst : *this) {
234     if (!Inst.DebugMarker)
235       continue;
236     Inst.DebugMarker->eraseFromParent();
237   }
238   InstList.clear();
239 }
240 
setParent(Function * parent)241 void BasicBlock::setParent(Function *parent) {
242   // Set Parent=parent, updating instruction symtab entries as appropriate.
243   InstList.setSymTabObject(&Parent, parent);
244 }
245 
246 iterator_range<filter_iterator<BasicBlock::const_iterator,
247                                std::function<bool(const Instruction &)>>>
instructionsWithoutDebug(bool SkipPseudoOp) const248 BasicBlock::instructionsWithoutDebug(bool SkipPseudoOp) const {
249   std::function<bool(const Instruction &)> Fn = [=](const Instruction &I) {
250     return !isa<DbgInfoIntrinsic>(I) &&
251            !(SkipPseudoOp && isa<PseudoProbeInst>(I));
252   };
253   return make_filter_range(*this, Fn);
254 }
255 
256 iterator_range<
257     filter_iterator<BasicBlock::iterator, std::function<bool(Instruction &)>>>
instructionsWithoutDebug(bool SkipPseudoOp)258 BasicBlock::instructionsWithoutDebug(bool SkipPseudoOp) {
259   std::function<bool(Instruction &)> Fn = [=](Instruction &I) {
260     return !isa<DbgInfoIntrinsic>(I) &&
261            !(SkipPseudoOp && isa<PseudoProbeInst>(I));
262   };
263   return make_filter_range(*this, Fn);
264 }
265 
266 filter_iterator<BasicBlock::const_iterator,
267                 std::function<bool(const Instruction &)>>::difference_type
sizeWithoutDebug() const268 BasicBlock::sizeWithoutDebug() const {
269   return std::distance(instructionsWithoutDebug().begin(),
270                        instructionsWithoutDebug().end());
271 }
272 
removeFromParent()273 void BasicBlock::removeFromParent() {
274   getParent()->getBasicBlockList().remove(getIterator());
275 }
276 
eraseFromParent()277 iplist<BasicBlock>::iterator BasicBlock::eraseFromParent() {
278   return getParent()->getBasicBlockList().erase(getIterator());
279 }
280 
moveBefore(SymbolTableList<BasicBlock>::iterator MovePos)281 void BasicBlock::moveBefore(SymbolTableList<BasicBlock>::iterator MovePos) {
282   getParent()->splice(MovePos, getParent(), getIterator());
283 }
284 
moveAfter(BasicBlock * MovePos)285 void BasicBlock::moveAfter(BasicBlock *MovePos) {
286   MovePos->getParent()->splice(++MovePos->getIterator(), getParent(),
287                                getIterator());
288 }
289 
getModule() const290 const Module *BasicBlock::getModule() const {
291   return getParent()->getParent();
292 }
293 
getDataLayout() const294 const DataLayout &BasicBlock::getDataLayout() const {
295   return getModule()->getDataLayout();
296 }
297 
getTerminatingMustTailCall() const298 const CallInst *BasicBlock::getTerminatingMustTailCall() const {
299   if (InstList.empty())
300     return nullptr;
301   const ReturnInst *RI = dyn_cast<ReturnInst>(&InstList.back());
302   if (!RI || RI == &InstList.front())
303     return nullptr;
304 
305   const Instruction *Prev = RI->getPrevNode();
306   if (!Prev)
307     return nullptr;
308 
309   if (Value *RV = RI->getReturnValue()) {
310     if (RV != Prev)
311       return nullptr;
312 
313     // Look through the optional bitcast.
314     if (auto *BI = dyn_cast<BitCastInst>(Prev)) {
315       RV = BI->getOperand(0);
316       Prev = BI->getPrevNode();
317       if (!Prev || RV != Prev)
318         return nullptr;
319     }
320   }
321 
322   if (auto *CI = dyn_cast<CallInst>(Prev)) {
323     if (CI->isMustTailCall())
324       return CI;
325   }
326   return nullptr;
327 }
328 
getTerminatingDeoptimizeCall() const329 const CallInst *BasicBlock::getTerminatingDeoptimizeCall() const {
330   if (InstList.empty())
331     return nullptr;
332   auto *RI = dyn_cast<ReturnInst>(&InstList.back());
333   if (!RI || RI == &InstList.front())
334     return nullptr;
335 
336   if (auto *CI = dyn_cast_or_null<CallInst>(RI->getPrevNode()))
337     if (Function *F = CI->getCalledFunction())
338       if (F->getIntrinsicID() == Intrinsic::experimental_deoptimize)
339         return CI;
340 
341   return nullptr;
342 }
343 
getPostdominatingDeoptimizeCall() const344 const CallInst *BasicBlock::getPostdominatingDeoptimizeCall() const {
345   const BasicBlock* BB = this;
346   SmallPtrSet<const BasicBlock *, 8> Visited;
347   Visited.insert(BB);
348   while (auto *Succ = BB->getUniqueSuccessor()) {
349     if (!Visited.insert(Succ).second)
350       return nullptr;
351     BB = Succ;
352   }
353   return BB->getTerminatingDeoptimizeCall();
354 }
355 
getFirstMayFaultInst() const356 const Instruction *BasicBlock::getFirstMayFaultInst() const {
357   if (InstList.empty())
358     return nullptr;
359   for (const Instruction &I : *this)
360     if (isa<LoadInst>(I) || isa<StoreInst>(I) || isa<CallBase>(I))
361       return &I;
362   return nullptr;
363 }
364 
getFirstNonPHI() const365 const Instruction* BasicBlock::getFirstNonPHI() const {
366   for (const Instruction &I : *this)
367     if (!isa<PHINode>(I))
368       return &I;
369   return nullptr;
370 }
371 
getFirstNonPHIIt() const372 BasicBlock::const_iterator BasicBlock::getFirstNonPHIIt() const {
373   const Instruction *I = getFirstNonPHI();
374   if (!I)
375     return end();
376   BasicBlock::const_iterator It = I->getIterator();
377   // Set the head-inclusive bit to indicate that this iterator includes
378   // any debug-info at the start of the block. This is a no-op unless the
379   // appropriate CMake flag is set.
380   It.setHeadBit(true);
381   return It;
382 }
383 
getFirstNonPHIOrDbg(bool SkipPseudoOp) const384 const Instruction *BasicBlock::getFirstNonPHIOrDbg(bool SkipPseudoOp) const {
385   for (const Instruction &I : *this) {
386     if (isa<PHINode>(I) || isa<DbgInfoIntrinsic>(I))
387       continue;
388 
389     if (SkipPseudoOp && isa<PseudoProbeInst>(I))
390       continue;
391 
392     return &I;
393   }
394   return nullptr;
395 }
396 
397 const Instruction *
getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp) const398 BasicBlock::getFirstNonPHIOrDbgOrLifetime(bool SkipPseudoOp) const {
399   for (const Instruction &I : *this) {
400     if (isa<PHINode>(I) || isa<DbgInfoIntrinsic>(I))
401       continue;
402 
403     if (I.isLifetimeStartOrEnd())
404       continue;
405 
406     if (SkipPseudoOp && isa<PseudoProbeInst>(I))
407       continue;
408 
409     return &I;
410   }
411   return nullptr;
412 }
413 
getFirstInsertionPt() const414 BasicBlock::const_iterator BasicBlock::getFirstInsertionPt() const {
415   const Instruction *FirstNonPHI = getFirstNonPHI();
416   if (!FirstNonPHI)
417     return end();
418 
419   const_iterator InsertPt = FirstNonPHI->getIterator();
420   if (InsertPt->isEHPad()) ++InsertPt;
421   // Set the head-inclusive bit to indicate that this iterator includes
422   // any debug-info at the start of the block. This is a no-op unless the
423   // appropriate CMake flag is set.
424   InsertPt.setHeadBit(true);
425   return InsertPt;
426 }
427 
getFirstNonPHIOrDbgOrAlloca() const428 BasicBlock::const_iterator BasicBlock::getFirstNonPHIOrDbgOrAlloca() const {
429   const Instruction *FirstNonPHI = getFirstNonPHI();
430   if (!FirstNonPHI)
431     return end();
432 
433   const_iterator InsertPt = FirstNonPHI->getIterator();
434   if (InsertPt->isEHPad())
435     ++InsertPt;
436 
437   if (isEntryBlock()) {
438     const_iterator End = end();
439     while (InsertPt != End &&
440            (isa<AllocaInst>(*InsertPt) || isa<DbgInfoIntrinsic>(*InsertPt) ||
441             isa<PseudoProbeInst>(*InsertPt))) {
442       if (const AllocaInst *AI = dyn_cast<AllocaInst>(&*InsertPt)) {
443         if (!AI->isStaticAlloca())
444           break;
445       }
446       ++InsertPt;
447     }
448   }
449   return InsertPt;
450 }
451 
dropAllReferences()452 void BasicBlock::dropAllReferences() {
453   for (Instruction &I : *this)
454     I.dropAllReferences();
455 }
456 
getSinglePredecessor() const457 const BasicBlock *BasicBlock::getSinglePredecessor() const {
458   const_pred_iterator PI = pred_begin(this), E = pred_end(this);
459   if (PI == E) return nullptr;         // No preds.
460   const BasicBlock *ThePred = *PI;
461   ++PI;
462   return (PI == E) ? ThePred : nullptr /*multiple preds*/;
463 }
464 
getUniquePredecessor() const465 const BasicBlock *BasicBlock::getUniquePredecessor() const {
466   const_pred_iterator PI = pred_begin(this), E = pred_end(this);
467   if (PI == E) return nullptr; // No preds.
468   const BasicBlock *PredBB = *PI;
469   ++PI;
470   for (;PI != E; ++PI) {
471     if (*PI != PredBB)
472       return nullptr;
473     // The same predecessor appears multiple times in the predecessor list.
474     // This is OK.
475   }
476   return PredBB;
477 }
478 
hasNPredecessors(unsigned N) const479 bool BasicBlock::hasNPredecessors(unsigned N) const {
480   return hasNItems(pred_begin(this), pred_end(this), N);
481 }
482 
hasNPredecessorsOrMore(unsigned N) const483 bool BasicBlock::hasNPredecessorsOrMore(unsigned N) const {
484   return hasNItemsOrMore(pred_begin(this), pred_end(this), N);
485 }
486 
getSingleSuccessor() const487 const BasicBlock *BasicBlock::getSingleSuccessor() const {
488   const_succ_iterator SI = succ_begin(this), E = succ_end(this);
489   if (SI == E) return nullptr; // no successors
490   const BasicBlock *TheSucc = *SI;
491   ++SI;
492   return (SI == E) ? TheSucc : nullptr /* multiple successors */;
493 }
494 
getUniqueSuccessor() const495 const BasicBlock *BasicBlock::getUniqueSuccessor() const {
496   const_succ_iterator SI = succ_begin(this), E = succ_end(this);
497   if (SI == E) return nullptr; // No successors
498   const BasicBlock *SuccBB = *SI;
499   ++SI;
500   for (;SI != E; ++SI) {
501     if (*SI != SuccBB)
502       return nullptr;
503     // The same successor appears multiple times in the successor list.
504     // This is OK.
505   }
506   return SuccBB;
507 }
508 
phis()509 iterator_range<BasicBlock::phi_iterator> BasicBlock::phis() {
510   PHINode *P = empty() ? nullptr : dyn_cast<PHINode>(&*begin());
511   return make_range<phi_iterator>(P, nullptr);
512 }
513 
removePredecessor(BasicBlock * Pred,bool KeepOneInputPHIs)514 void BasicBlock::removePredecessor(BasicBlock *Pred,
515                                    bool KeepOneInputPHIs) {
516   // Use hasNUsesOrMore to bound the cost of this assertion for complex CFGs.
517   assert((hasNUsesOrMore(16) || llvm::is_contained(predecessors(this), Pred)) &&
518          "Pred is not a predecessor!");
519 
520   // Return early if there are no PHI nodes to update.
521   if (empty() || !isa<PHINode>(begin()))
522     return;
523 
524   unsigned NumPreds = cast<PHINode>(front()).getNumIncomingValues();
525   for (PHINode &Phi : make_early_inc_range(phis())) {
526     Phi.removeIncomingValue(Pred, !KeepOneInputPHIs);
527     if (KeepOneInputPHIs)
528       continue;
529 
530     // If we have a single predecessor, removeIncomingValue may have erased the
531     // PHI node itself.
532     if (NumPreds == 1)
533       continue;
534 
535     // Try to replace the PHI node with a constant value.
536     if (Value *PhiConstant = Phi.hasConstantValue()) {
537       Phi.replaceAllUsesWith(PhiConstant);
538       Phi.eraseFromParent();
539     }
540   }
541 }
542 
canSplitPredecessors() const543 bool BasicBlock::canSplitPredecessors() const {
544   const Instruction *FirstNonPHI = getFirstNonPHI();
545   if (isa<LandingPadInst>(FirstNonPHI))
546     return true;
547   // This is perhaps a little conservative because constructs like
548   // CleanupBlockInst are pretty easy to split.  However, SplitBlockPredecessors
549   // cannot handle such things just yet.
550   if (FirstNonPHI->isEHPad())
551     return false;
552   return true;
553 }
554 
isLegalToHoistInto() const555 bool BasicBlock::isLegalToHoistInto() const {
556   auto *Term = getTerminator();
557   // No terminator means the block is under construction.
558   if (!Term)
559     return true;
560 
561   // If the block has no successors, there can be no instructions to hoist.
562   assert(Term->getNumSuccessors() > 0);
563 
564   // Instructions should not be hoisted across special terminators, which may
565   // have side effects or return values.
566   return !Term->isSpecialTerminator();
567 }
568 
isEntryBlock() const569 bool BasicBlock::isEntryBlock() const {
570   const Function *F = getParent();
571   assert(F && "Block must have a parent function to use this API");
572   return this == &F->getEntryBlock();
573 }
574 
splitBasicBlock(iterator I,const Twine & BBName,bool Before)575 BasicBlock *BasicBlock::splitBasicBlock(iterator I, const Twine &BBName,
576                                         bool Before) {
577   if (Before)
578     return splitBasicBlockBefore(I, BBName);
579 
580   assert(getTerminator() && "Can't use splitBasicBlock on degenerate BB!");
581   assert(I != InstList.end() &&
582          "Trying to get me to create degenerate basic block!");
583 
584   BasicBlock *New = BasicBlock::Create(getContext(), BBName, getParent(),
585                                        this->getNextNode());
586 
587   // Save DebugLoc of split point before invalidating iterator.
588   DebugLoc Loc = I->getStableDebugLoc();
589   // Move all of the specified instructions from the original basic block into
590   // the new basic block.
591   New->splice(New->end(), this, I, end());
592 
593   // Add a branch instruction to the newly formed basic block.
594   BranchInst *BI = BranchInst::Create(New, this);
595   BI->setDebugLoc(Loc);
596 
597   // Now we must loop through all of the successors of the New block (which
598   // _were_ the successors of the 'this' block), and update any PHI nodes in
599   // successors.  If there were PHI nodes in the successors, then they need to
600   // know that incoming branches will be from New, not from Old (this).
601   //
602   New->replaceSuccessorsPhiUsesWith(this, New);
603   return New;
604 }
605 
splitBasicBlockBefore(iterator I,const Twine & BBName)606 BasicBlock *BasicBlock::splitBasicBlockBefore(iterator I, const Twine &BBName) {
607   assert(getTerminator() &&
608          "Can't use splitBasicBlockBefore on degenerate BB!");
609   assert(I != InstList.end() &&
610          "Trying to get me to create degenerate basic block!");
611 
612   assert((!isa<PHINode>(*I) || getSinglePredecessor()) &&
613          "cannot split on multi incoming phis");
614 
615   BasicBlock *New = BasicBlock::Create(getContext(), BBName, getParent(), this);
616   // Save DebugLoc of split point before invalidating iterator.
617   DebugLoc Loc = I->getDebugLoc();
618   // Move all of the specified instructions from the original basic block into
619   // the new basic block.
620   New->splice(New->end(), this, begin(), I);
621 
622   // Loop through all of the predecessors of the 'this' block (which will be the
623   // predecessors of the New block), replace the specified successor 'this'
624   // block to point at the New block and update any PHI nodes in 'this' block.
625   // If there were PHI nodes in 'this' block, the PHI nodes are updated
626   // to reflect that the incoming branches will be from the New block and not
627   // from predecessors of the 'this' block.
628   // Save predecessors to separate vector before modifying them.
629   SmallVector<BasicBlock *, 4> Predecessors;
630   for (BasicBlock *Pred : predecessors(this))
631     Predecessors.push_back(Pred);
632   for (BasicBlock *Pred : Predecessors) {
633     Instruction *TI = Pred->getTerminator();
634     TI->replaceSuccessorWith(this, New);
635     this->replacePhiUsesWith(Pred, New);
636   }
637   // Add a branch instruction from  "New" to "this" Block.
638   BranchInst *BI = BranchInst::Create(this, New);
639   BI->setDebugLoc(Loc);
640 
641   return New;
642 }
643 
erase(BasicBlock::iterator FromIt,BasicBlock::iterator ToIt)644 BasicBlock::iterator BasicBlock::erase(BasicBlock::iterator FromIt,
645                                        BasicBlock::iterator ToIt) {
646   for (Instruction &I : make_early_inc_range(make_range(FromIt, ToIt)))
647     I.eraseFromParent();
648   return ToIt;
649 }
650 
replacePhiUsesWith(BasicBlock * Old,BasicBlock * New)651 void BasicBlock::replacePhiUsesWith(BasicBlock *Old, BasicBlock *New) {
652   // N.B. This might not be a complete BasicBlock, so don't assume
653   // that it ends with a non-phi instruction.
654   for (Instruction &I : *this) {
655     PHINode *PN = dyn_cast<PHINode>(&I);
656     if (!PN)
657       break;
658     PN->replaceIncomingBlockWith(Old, New);
659   }
660 }
661 
replaceSuccessorsPhiUsesWith(BasicBlock * Old,BasicBlock * New)662 void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *Old,
663                                               BasicBlock *New) {
664   Instruction *TI = getTerminator();
665   if (!TI)
666     // Cope with being called on a BasicBlock that doesn't have a terminator
667     // yet. Clang's CodeGenFunction::EmitReturnBlock() likes to do this.
668     return;
669   for (BasicBlock *Succ : successors(TI))
670     Succ->replacePhiUsesWith(Old, New);
671 }
672 
replaceSuccessorsPhiUsesWith(BasicBlock * New)673 void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *New) {
674   this->replaceSuccessorsPhiUsesWith(this, New);
675 }
676 
isLandingPad() const677 bool BasicBlock::isLandingPad() const {
678   return isa<LandingPadInst>(getFirstNonPHI());
679 }
680 
getLandingPadInst() const681 const LandingPadInst *BasicBlock::getLandingPadInst() const {
682   return dyn_cast<LandingPadInst>(getFirstNonPHI());
683 }
684 
getIrrLoopHeaderWeight() const685 std::optional<uint64_t> BasicBlock::getIrrLoopHeaderWeight() const {
686   const Instruction *TI = getTerminator();
687   if (MDNode *MDIrrLoopHeader =
688       TI->getMetadata(LLVMContext::MD_irr_loop)) {
689     MDString *MDName = cast<MDString>(MDIrrLoopHeader->getOperand(0));
690     if (MDName->getString() == "loop_header_weight") {
691       auto *CI = mdconst::extract<ConstantInt>(MDIrrLoopHeader->getOperand(1));
692       return std::optional<uint64_t>(CI->getValue().getZExtValue());
693     }
694   }
695   return std::nullopt;
696 }
697 
skipDebugIntrinsics(BasicBlock::iterator It)698 BasicBlock::iterator llvm::skipDebugIntrinsics(BasicBlock::iterator It) {
699   while (isa<DbgInfoIntrinsic>(It))
700     ++It;
701   return It;
702 }
703 
renumberInstructions()704 void BasicBlock::renumberInstructions() {
705   unsigned Order = 0;
706   for (Instruction &I : *this)
707     I.Order = Order++;
708 
709   // Set the bit to indicate that the instruction order valid and cached.
710   BasicBlockBits Bits = getBasicBlockBits();
711   Bits.InstrOrderValid = true;
712   setBasicBlockBits(Bits);
713 
714   NumInstrRenumberings++;
715 }
716 
flushTerminatorDbgRecords()717 void BasicBlock::flushTerminatorDbgRecords() {
718   // If we erase the terminator in a block, any DbgRecords will sink and "fall
719   // off the end", existing after any terminator that gets inserted. With
720   // dbg.value intrinsics we would just insert the terminator at end() and
721   // the dbg.values would come before the terminator. With DbgRecords, we must
722   // do this manually.
723   // To get out of this unfortunate form, whenever we insert a terminator,
724   // check whether there's anything trailing at the end and move those
725   // DbgRecords in front of the terminator.
726 
727   // Do nothing if we're not in new debug-info format.
728   if (!IsNewDbgInfoFormat)
729     return;
730 
731   // If there's no terminator, there's nothing to do.
732   Instruction *Term = getTerminator();
733   if (!Term)
734     return;
735 
736   // Are there any dangling DbgRecords?
737   DbgMarker *TrailingDbgRecords = getTrailingDbgRecords();
738   if (!TrailingDbgRecords)
739     return;
740 
741   // Transfer DbgRecords from the trailing position onto the terminator.
742   createMarker(Term);
743   Term->DebugMarker->absorbDebugValues(*TrailingDbgRecords, false);
744   TrailingDbgRecords->eraseFromParent();
745   deleteTrailingDbgRecords();
746 }
747 
spliceDebugInfoEmptyBlock(BasicBlock::iterator Dest,BasicBlock * Src,BasicBlock::iterator First,BasicBlock::iterator Last)748 void BasicBlock::spliceDebugInfoEmptyBlock(BasicBlock::iterator Dest,
749                                            BasicBlock *Src,
750                                            BasicBlock::iterator First,
751                                            BasicBlock::iterator Last) {
752   // Imagine the folowing:
753   //
754   //   bb1:
755   //     dbg.value(...
756   //     ret i32 0
757   //
758   // If an optimisation pass attempts to splice the contents of the block from
759   // BB1->begin() to BB1->getTerminator(), then the dbg.value will be
760   // transferred to the destination.
761   // However, in the "new" DbgRecord format for debug-info, that range is empty:
762   // begin() returns an iterator to the terminator, as there will only be a
763   // single instruction in the block. We must piece together from the bits set
764   // in the iterators whether there was the intention to transfer any debug
765   // info.
766 
767   // If we're not in "new" debug-info format, do nothing.
768   if (!IsNewDbgInfoFormat)
769     return;
770 
771   assert(First == Last);
772   bool InsertAtHead = Dest.getHeadBit();
773   bool ReadFromHead = First.getHeadBit();
774 
775   // If the source block is completely empty, including no terminator, then
776   // transfer any trailing DbgRecords that are still hanging around. This can
777   // occur when a block is optimised away and the terminator has been moved
778   // somewhere else.
779   if (Src->empty()) {
780     DbgMarker *SrcTrailingDbgRecords = Src->getTrailingDbgRecords();
781     if (!SrcTrailingDbgRecords)
782       return;
783 
784     Dest->adoptDbgRecords(Src, Src->end(), InsertAtHead);
785     // adoptDbgRecords should have released the trailing DbgRecords.
786     assert(!Src->getTrailingDbgRecords());
787     return;
788   }
789 
790   // There are instructions in this block; if the First iterator was
791   // with begin() / getFirstInsertionPt() then the caller intended debug-info
792   // at the start of the block to be transferred. Return otherwise.
793   if (Src->empty() || First != Src->begin() || !ReadFromHead)
794     return;
795 
796   // Is there actually anything to transfer?
797   if (!First->hasDbgRecords())
798     return;
799 
800   createMarker(Dest)->absorbDebugValues(*First->DebugMarker, InsertAtHead);
801 
802   return;
803 }
804 
spliceDebugInfo(BasicBlock::iterator Dest,BasicBlock * Src,BasicBlock::iterator First,BasicBlock::iterator Last)805 void BasicBlock::spliceDebugInfo(BasicBlock::iterator Dest, BasicBlock *Src,
806                                  BasicBlock::iterator First,
807                                  BasicBlock::iterator Last) {
808   /* Do a quick normalisation before calling the real splice implementation. We
809      might be operating on a degenerate basic block that has no instructions
810      in it, a legitimate transient state. In that case, Dest will be end() and
811      any DbgRecords temporarily stored in the TrailingDbgRecords map in
812      LLVMContext. We might illustrate it thus:
813 
814                          Dest
815                            |
816      this-block:    ~~~~~~~~
817       Src-block:            ++++B---B---B---B:::C
818                                 |               |
819                                First           Last
820 
821      However: does the caller expect the "~" DbgRecords to end up before or
822      after the spliced segment? This is communciated in the "Head" bit of Dest,
823      which signals whether the caller called begin() or end() on this block.
824 
825      If the head bit is set, then all is well, we leave DbgRecords trailing just
826      like how dbg.value instructions would trail after instructions spliced to
827      the beginning of this block.
828 
829      If the head bit isn't set, then try to jam the "~" DbgRecords onto the
830      front of the First instruction, then splice like normal, which joins the
831      "~" DbgRecords with the "+" DbgRecords. However if the "+" DbgRecords are
832      supposed to be left behind in Src, then:
833       * detach the "+" DbgRecords,
834       * move the "~" DbgRecords onto First,
835       * splice like normal,
836       * replace the "+" DbgRecords onto the Last position.
837      Complicated, but gets the job done. */
838 
839   // If we're inserting at end(), and not in front of dangling DbgRecords, then
840   // move the DbgRecords onto "First". They'll then be moved naturally in the
841   // splice process.
842   DbgMarker *MoreDanglingDbgRecords = nullptr;
843   DbgMarker *OurTrailingDbgRecords = getTrailingDbgRecords();
844   if (Dest == end() && !Dest.getHeadBit() && OurTrailingDbgRecords) {
845     // Are the "+" DbgRecords not supposed to move? If so, detach them
846     // temporarily.
847     if (!First.getHeadBit() && First->hasDbgRecords()) {
848       MoreDanglingDbgRecords = Src->getMarker(First);
849       MoreDanglingDbgRecords->removeFromParent();
850     }
851 
852     if (First->hasDbgRecords()) {
853       // Place them at the front, it would look like this:
854       //            Dest
855       //              |
856       // this-block:
857       // Src-block: ~~~~~~~~++++B---B---B---B:::C
858       //                        |               |
859       //                       First           Last
860       First->adoptDbgRecords(this, end(), true);
861     } else {
862       // No current marker, create one and absorb in. (FIXME: we can avoid an
863       // allocation in the future).
864       DbgMarker *CurMarker = Src->createMarker(&*First);
865       CurMarker->absorbDebugValues(*OurTrailingDbgRecords, false);
866       OurTrailingDbgRecords->eraseFromParent();
867     }
868     deleteTrailingDbgRecords();
869     First.setHeadBit(true);
870   }
871 
872   // Call the main debug-info-splicing implementation.
873   spliceDebugInfoImpl(Dest, Src, First, Last);
874 
875   // Do we have some "+" DbgRecords hanging around that weren't supposed to
876   // move, and we detached to make things easier?
877   if (!MoreDanglingDbgRecords)
878     return;
879 
880   // FIXME: we could avoid an allocation here sometimes. (adoptDbgRecords
881   // requires an iterator).
882   DbgMarker *LastMarker = Src->createMarker(Last);
883   LastMarker->absorbDebugValues(*MoreDanglingDbgRecords, true);
884   MoreDanglingDbgRecords->eraseFromParent();
885 }
886 
spliceDebugInfoImpl(BasicBlock::iterator Dest,BasicBlock * Src,BasicBlock::iterator First,BasicBlock::iterator Last)887 void BasicBlock::spliceDebugInfoImpl(BasicBlock::iterator Dest, BasicBlock *Src,
888                                      BasicBlock::iterator First,
889                                      BasicBlock::iterator Last) {
890   // Find out where to _place_ these dbg.values; if InsertAtHead is specified,
891   // this will be at the start of Dest's debug value range, otherwise this is
892   // just Dest's marker.
893   bool InsertAtHead = Dest.getHeadBit();
894   bool ReadFromHead = First.getHeadBit();
895   // Use this flag to signal the abnormal case, where we don't want to copy the
896   // DbgRecords ahead of the "Last" position.
897   bool ReadFromTail = !Last.getTailBit();
898   bool LastIsEnd = (Last == Src->end());
899 
900   /*
901     Here's an illustration of what we're about to do. We have two blocks, this
902     and Src, and two segments of list. Each instruction is marked by a capital
903     while potential DbgRecord debug-info is marked out by "-" characters and a
904     few other special characters (+:=) where I want to highlight what's going
905     on.
906 
907                                                  Dest
908                                                    |
909      this-block:    A----A----A                ====A----A----A----A---A---A
910       Src-block                ++++B---B---B---B:::C
911                                    |               |
912                                   First           Last
913 
914     The splice method is going to take all the instructions from First up to
915     (but not including) Last and insert them in _front_ of Dest, forming one
916     long list. All the DbgRecords attached to instructions _between_ First and
917     Last need no maintenence. However, we have to do special things with the
918     DbgRecords marked with the +:= characters. We only have three positions:
919     should the "+" DbgRecords be transferred, and if so to where? Do we move the
920     ":" DbgRecords? Would they go in front of the "=" DbgRecords, or should the
921     "=" DbgRecords go before "+" DbgRecords?
922 
923     We're told which way it should be by the bits carried in the iterators. The
924     "Head" bit indicates whether the specified position is supposed to be at the
925     front of the attached DbgRecords (true) or not (false). The Tail bit is true
926     on the other end of a range: is the range intended to include DbgRecords up
927     to the end (false) or not (true).
928 
929     FIXME: the tail bit doesn't need to be distinct from the head bit, we could
930     combine them.
931 
932     Here are some examples of different configurations:
933 
934       Dest.Head = true, First.Head = true, Last.Tail = false
935 
936       this-block:    A----A----A++++B---B---B---B:::====A----A----A----A---A---A
937                                     |                   |
938                                   First                Dest
939 
940     Wheras if we didn't want to read from the Src list,
941 
942       Dest.Head = true, First.Head = false, Last.Tail = false
943 
944       this-block:    A----A----AB---B---B---B:::====A----A----A----A---A---A
945                                 |                   |
946                               First                Dest
947 
948     Or if we didn't want to insert at the head of Dest:
949 
950       Dest.Head = false, First.Head = false, Last.Tail = false
951 
952       this-block:    A----A----A====B---B---B---B:::A----A----A----A---A---A
953                                     |               |
954                                   First            Dest
955 
956     Tests for these various configurations can be found in the unit test file
957     BasicBlockDbgInfoTest.cpp.
958 
959    */
960 
961   // Detach the marker at Dest -- this lets us move the "====" DbgRecords
962   // around.
963   DbgMarker *DestMarker = nullptr;
964   if ((DestMarker = getMarker(Dest))) {
965     if (Dest == end()) {
966       assert(DestMarker == getTrailingDbgRecords());
967       deleteTrailingDbgRecords();
968     } else {
969       DestMarker->removeFromParent();
970     }
971   }
972 
973   // If we're moving the tail range of DbgRecords (":::"), absorb them into the
974   // front of the DbgRecords at Dest.
975   if (ReadFromTail && Src->getMarker(Last)) {
976     DbgMarker *FromLast = Src->getMarker(Last);
977     if (LastIsEnd) {
978       if (Dest == end()) {
979         // Abosrb the trailing markers from Src.
980         assert(FromLast == Src->getTrailingDbgRecords());
981         createMarker(Dest)->absorbDebugValues(*FromLast, true);
982         FromLast->eraseFromParent();
983         Src->deleteTrailingDbgRecords();
984       } else {
985         // adoptDbgRecords will release any trailers.
986         Dest->adoptDbgRecords(Src, Last, true);
987       }
988       assert(!Src->getTrailingDbgRecords());
989     } else {
990       // FIXME: can we use adoptDbgRecords here to reduce allocations?
991       DbgMarker *OntoDest = createMarker(Dest);
992       OntoDest->absorbDebugValues(*FromLast, true);
993     }
994   }
995 
996   // If we're _not_ reading from the head of First, i.e. the "++++" DbgRecords,
997   // move their markers onto Last. They remain in the Src block. No action
998   // needed.
999   if (!ReadFromHead && First->hasDbgRecords()) {
1000     if (Last != Src->end()) {
1001       Last->adoptDbgRecords(Src, First, true);
1002     } else {
1003       DbgMarker *OntoLast = Src->createMarker(Last);
1004       DbgMarker *FromFirst = Src->createMarker(First);
1005       // Always insert at front of Last.
1006       OntoLast->absorbDebugValues(*FromFirst, true);
1007     }
1008   }
1009 
1010   // Finally, do something with the "====" DbgRecords we detached.
1011   if (DestMarker) {
1012     if (InsertAtHead) {
1013       // Insert them at the end of the DbgRecords at Dest. The "::::" DbgRecords
1014       // might be in front of them.
1015       DbgMarker *NewDestMarker = createMarker(Dest);
1016       NewDestMarker->absorbDebugValues(*DestMarker, false);
1017     } else {
1018       // Insert them right at the start of the range we moved, ahead of First
1019       // and the "++++" DbgRecords.
1020       // This also covers the rare circumstance where we insert at end(), and we
1021       // did not generate the iterator with begin() / getFirstInsertionPt(),
1022       // meaning any trailing debug-info at the end of the block would
1023       // "normally" have been pushed in front of "First". We move it there now.
1024       DbgMarker *FirstMarker = createMarker(First);
1025       FirstMarker->absorbDebugValues(*DestMarker, true);
1026     }
1027     DestMarker->eraseFromParent();
1028   }
1029 }
1030 
splice(iterator Dest,BasicBlock * Src,iterator First,iterator Last)1031 void BasicBlock::splice(iterator Dest, BasicBlock *Src, iterator First,
1032                         iterator Last) {
1033   assert(Src->IsNewDbgInfoFormat == IsNewDbgInfoFormat);
1034 
1035 #ifdef EXPENSIVE_CHECKS
1036   // Check that First is before Last.
1037   auto FromBBEnd = Src->end();
1038   for (auto It = First; It != Last; ++It)
1039     assert(It != FromBBEnd && "FromBeginIt not before FromEndIt!");
1040 #endif // EXPENSIVE_CHECKS
1041 
1042   // Lots of horrible special casing for empty transfers: the dbg.values between
1043   // two positions could be spliced in dbg.value mode.
1044   if (First == Last) {
1045     spliceDebugInfoEmptyBlock(Dest, Src, First, Last);
1046     return;
1047   }
1048 
1049   // Handle non-instr debug-info specific juggling.
1050   if (IsNewDbgInfoFormat)
1051     spliceDebugInfo(Dest, Src, First, Last);
1052 
1053   // And move the instructions.
1054   getInstList().splice(Dest, Src->getInstList(), First, Last);
1055 
1056   flushTerminatorDbgRecords();
1057 }
1058 
insertDbgRecordAfter(DbgRecord * DR,Instruction * I)1059 void BasicBlock::insertDbgRecordAfter(DbgRecord *DR, Instruction *I) {
1060   assert(IsNewDbgInfoFormat);
1061   assert(I->getParent() == this);
1062 
1063   iterator NextIt = std::next(I->getIterator());
1064   DbgMarker *NextMarker = createMarker(NextIt);
1065   NextMarker->insertDbgRecord(DR, true);
1066 }
1067 
insertDbgRecordBefore(DbgRecord * DR,InstListType::iterator Where)1068 void BasicBlock::insertDbgRecordBefore(DbgRecord *DR,
1069                                        InstListType::iterator Where) {
1070   assert(Where == end() || Where->getParent() == this);
1071   bool InsertAtHead = Where.getHeadBit();
1072   DbgMarker *M = createMarker(Where);
1073   M->insertDbgRecord(DR, InsertAtHead);
1074 }
1075 
getNextMarker(Instruction * I)1076 DbgMarker *BasicBlock::getNextMarker(Instruction *I) {
1077   return getMarker(std::next(I->getIterator()));
1078 }
1079 
getMarker(InstListType::iterator It)1080 DbgMarker *BasicBlock::getMarker(InstListType::iterator It) {
1081   if (It == end()) {
1082     DbgMarker *DM = getTrailingDbgRecords();
1083     return DM;
1084   }
1085   return It->DebugMarker;
1086 }
1087 
reinsertInstInDbgRecords(Instruction * I,std::optional<DbgRecord::self_iterator> Pos)1088 void BasicBlock::reinsertInstInDbgRecords(
1089     Instruction *I, std::optional<DbgRecord::self_iterator> Pos) {
1090   // "I" was originally removed from a position where it was
1091   // immediately in front of Pos. Any DbgRecords on that position then "fell
1092   // down" onto Pos. "I" has been re-inserted at the front of that wedge of
1093   // DbgRecords, shuffle them around to represent the original positioning. To
1094   // illustrate:
1095   //
1096   //   Instructions:  I1---I---I0
1097   //       DbgRecords:    DDD DDD
1098   //
1099   // Instruction "I" removed,
1100   //
1101   //   Instructions:  I1------I0
1102   //       DbgRecords:    DDDDDD
1103   //                       ^Pos
1104   //
1105   // Instruction "I" re-inserted (now):
1106   //
1107   //   Instructions:  I1---I------I0
1108   //       DbgRecords:        DDDDDD
1109   //                           ^Pos
1110   //
1111   // After this method completes:
1112   //
1113   //   Instructions:  I1---I---I0
1114   //       DbgRecords:    DDD DDD
1115 
1116   // This happens if there were no DbgRecords on I0. Are there now DbgRecords
1117   // there?
1118   if (!Pos) {
1119     DbgMarker *NextMarker = getNextMarker(I);
1120     if (!NextMarker)
1121       return;
1122     if (NextMarker->StoredDbgRecords.empty())
1123       return;
1124     // There are DbgMarkers there now -- they fell down from "I".
1125     DbgMarker *ThisMarker = createMarker(I);
1126     ThisMarker->absorbDebugValues(*NextMarker, false);
1127     return;
1128   }
1129 
1130   // Is there even a range of DbgRecords to move?
1131   DbgMarker *DM = (*Pos)->getMarker();
1132   auto Range = make_range(DM->StoredDbgRecords.begin(), (*Pos));
1133   if (Range.begin() == Range.end())
1134     return;
1135 
1136   // Otherwise: splice.
1137   DbgMarker *ThisMarker = createMarker(I);
1138   assert(ThisMarker->StoredDbgRecords.empty());
1139   ThisMarker->absorbDebugValues(Range, *DM, true);
1140 }
1141 
1142 #ifndef NDEBUG
1143 /// In asserts builds, this checks the numbering. In non-asserts builds, it
1144 /// is defined as a no-op inline function in BasicBlock.h.
validateInstrOrdering() const1145 void BasicBlock::validateInstrOrdering() const {
1146   if (!isInstrOrderValid())
1147     return;
1148   const Instruction *Prev = nullptr;
1149   for (const Instruction &I : *this) {
1150     assert((!Prev || Prev->comesBefore(&I)) &&
1151            "cached instruction ordering is incorrect");
1152     Prev = &I;
1153   }
1154 }
1155 #endif
1156 
setTrailingDbgRecords(DbgMarker * foo)1157 void BasicBlock::setTrailingDbgRecords(DbgMarker *foo) {
1158   getContext().pImpl->setTrailingDbgRecords(this, foo);
1159 }
1160 
getTrailingDbgRecords()1161 DbgMarker *BasicBlock::getTrailingDbgRecords() {
1162   return getContext().pImpl->getTrailingDbgRecords(this);
1163 }
1164 
deleteTrailingDbgRecords()1165 void BasicBlock::deleteTrailingDbgRecords() {
1166   getContext().pImpl->deleteTrailingDbgRecords(this);
1167 }
1168