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