Lines Matching refs:BasicBlock

1 //===- BasicBlockUtils.cpp - BasicBlock Utilities --------------------------==//
24 #include "llvm/IR/BasicBlock.h"
63 ArrayRef<BasicBlock *> BBs,
69 SmallPtrSet<BasicBlock *, 4> UniqueSuccessors;
70 for (BasicBlock *Succ : successors(BB)) {
96 void llvm::DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU,
101 void llvm::DeleteDeadBlocks(ArrayRef <BasicBlock *> BBs, DomTreeUpdater *DTU,
105 SmallPtrSet<BasicBlock *, 4> Dead(BBs.begin(), BBs.end());
108 for (BasicBlock *Pred : predecessors(BB))
118 for (BasicBlock *BB : BBs)
127 df_iterator_default_set<BasicBlock*> Reachable;
130 for (BasicBlock *BB : depth_first_ext(&F, Reachable))
134 std::vector<BasicBlock*> DeadBlocks;
135 for (BasicBlock &BB : F)
145 bool llvm::FoldSingleEntryPHINodes(BasicBlock *BB,
164 bool llvm::DeleteDeadPHIs(BasicBlock *BB, const TargetLibraryInfo *TLI,
180 bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU,
189 BasicBlock *PredBB = BB->getUniquePredecessor();
207 BasicBlock *NewSucc = nullptr;
253 SmallPtrSet<BasicBlock *, 8> SeenSuccs;
254 SmallPtrSet<BasicBlock *, 2> SuccsOfPredBB(succ_begin(PredBB),
263 for (BasicBlock *SuccOfBB : successors(BB))
269 for (BasicBlock *SuccOfBB : successors(BB))
340 SmallPtrSetImpl<BasicBlock *> &MergeBlocks, Loop *L, DomTreeUpdater *DTU,
346 BasicBlock *BB = *MergeBlocks.begin();
347 BasicBlock *Dest = BB->getSingleSuccessor();
349 BasicBlock *Fold = Dest->getUniquePredecessor();
386 DbgVariableRecordsRemoveRedundantDbgInstrsUsingBackwardScan(BasicBlock *BB) {
441 static bool removeRedundantDbgInstrsUsingBackwardScan(BasicBlock *BB) {
503 DbgVariableRecordsRemoveRedundantDbgInstrsUsingForwardScan(BasicBlock *BB) {
546 DbgVariableRecordsRemoveUndefDbgAssignsFromEntryBlock(BasicBlock *BB) {
582 static bool removeRedundantDbgInstrsUsingForwardScan(BasicBlock *BB) {
647 static bool removeUndefDbgAssignsFromEntryBlock(BasicBlock *BB) {
685 bool llvm::RemoveRedundantDbgInstrs(BasicBlock *BB) {
710 void llvm::ReplaceInstWithValue(BasicBlock::iterator &BI, Value *V) {
723 void llvm::ReplaceInstWithInst(BasicBlock *BB, BasicBlock::iterator &BI,
734 BasicBlock::iterator New = I->insertInto(BB, BI);
743 bool llvm::IsBlockFollowedByDeoptOrUnreachable(const BasicBlock *BB) {
745 SmallPtrSet<const BasicBlock *, 8> VisitedBlocks;
758 BasicBlock::iterator BI(From);
762 BasicBlock *llvm::SplitEdge(BasicBlock *BB, BasicBlock *Succ, DominatorTree *DT,
784 if (BasicBlock *SP = Succ->getSinglePredecessor()) {
800 void llvm::setUnwindEdgeTo(Instruction *TI, BasicBlock *Succ) {
811 void llvm::updatePhiNodes(BasicBlock *DestBB, BasicBlock *OldPred,
812 BasicBlock *NewPred, PHINode *Until) {
833 BasicBlock *llvm::ehAwareSplitEdge(BasicBlock *BB, BasicBlock *Succ,
844 SmallVector<BasicBlock *, 4> LoopPreds;
860 for (BasicBlock *P : predecessors(Succ)) {
873 if (any_of(LoopPreds, [](BasicBlock *Pred) {
882 BasicBlock::Create(BB->getContext(), BBName, BB->getParent(), Succ);
969 BasicBlock *NewExitBB = SplitBlockPredecessors(
981 void llvm::createPHIsForSplitLoopExit(ArrayRef<BasicBlock *> Preds,
982 BasicBlock *SplitBB, BasicBlock *DestBB) {
1002 BasicBlock::iterator InsertPos =
1006 for (BasicBlock *BB : Preds)
1018 for (BasicBlock &BB : F) {
1028 static BasicBlock *SplitBlockImpl(BasicBlock *Old, BasicBlock::iterator SplitPt,
1038 BasicBlock::iterator SplitIt = SplitPt;
1044 BasicBlock *New = Old->splitBasicBlock(
1056 SmallPtrSet<BasicBlock *, 8> UniqueSuccessorsOfOld;
1059 for (BasicBlock *SuccessorOfOld : successors(New))
1084 BasicBlock *llvm::SplitBlock(BasicBlock *Old, BasicBlock::iterator SplitPt,
1091 BasicBlock *llvm::SplitBlock(BasicBlock *Old, BasicBlock::iterator SplitPt,
1099 BasicBlock *llvm::splitBlockBefore(BasicBlock *Old, BasicBlock::iterator SplitPt,
1104 BasicBlock::iterator SplitIt = SplitPt;
1108 BasicBlock *New = Old->splitBasicBlock(
1122 SmallPtrSet<BasicBlock *, 8> UniquePredecessorsOfOld;
1125 for (BasicBlock *PredecessorOfOld : predecessors(New))
1146 static void UpdateAnalysisInformation(BasicBlock *OldBB, BasicBlock *NewBB,
1147 ArrayRef<BasicBlock *> Preds,
1163 SmallPtrSet<BasicBlock *, 8> UniquePreds;
1200 for (BasicBlock *Pred : Preds) {
1234 for (BasicBlock *Pred : Preds) {
1260 static void UpdatePHINodes(BasicBlock *OrigBB, BasicBlock *NewBB,
1261 ArrayRef<BasicBlock *> Preds, BranchInst *BI,
1264 SmallPtrSet<BasicBlock *, 16> PredSet(Preds.begin(), Preds.end());
1265 for (BasicBlock::iterator I = OrigBB->begin(); isa<PHINode>(I); ) {
1312 BasicBlock *IncomingBB = PN->getIncomingBlock(i);
1324 BasicBlock *OrigBB, ArrayRef<BasicBlock *> Preds, const char *Suffix1,
1325 const char *Suffix2, SmallVectorImpl<BasicBlock *> &NewBBs,
1329 static BasicBlock *
1330 SplitBlockPredecessorsImpl(BasicBlock *BB, ArrayRef<BasicBlock *> Preds,
1341 SmallVector<BasicBlock*, 2> NewBBs;
1350 BasicBlock *NewBB = BasicBlock::Create(
1357 BasicBlock *OldLatch = nullptr;
1374 for (BasicBlock *Pred : Preds) {
1389 for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++I)
1404 BasicBlock *NewLatch = L->getLoopLatch();
1419 BasicBlock *llvm::SplitBlockPredecessors(BasicBlock *BB,
1420 ArrayRef<BasicBlock *> Preds,
1427 BasicBlock *llvm::SplitBlockPredecessors(BasicBlock *BB,
1428 ArrayRef<BasicBlock *> Preds,
1438 BasicBlock *OrigBB, ArrayRef<BasicBlock *> Preds, const char *Suffix1,
1439 const char *Suffix2, SmallVectorImpl<BasicBlock *> &NewBBs,
1446 BasicBlock *NewBB1 = BasicBlock::Create(OrigBB->getContext(),
1456 for (BasicBlock *Pred : Preds) {
1473 SmallVector<BasicBlock*, 8> NewBB2Preds;
1476 BasicBlock *Pred = *i++;
1484 BasicBlock *NewBB2 = nullptr;
1487 NewBB2 = BasicBlock::Create(OrigBB->getContext(),
1497 for (BasicBlock *NewBB2Pred : NewBB2Preds)
1539 void llvm::SplitLandingPadPredecessors(BasicBlock *OrigBB,
1540 ArrayRef<BasicBlock *> Preds,
1542 SmallVectorImpl<BasicBlock *> &NewBBs,
1551 ReturnInst *llvm::FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB,
1552 BasicBlock *Pred,
1610 BasicBlock::iterator SplitBefore,
1614 BasicBlock *ThenBlock) {
1623 BasicBlock::iterator SplitBefore,
1627 BasicBlock *ElseBlock) {
1635 void llvm::SplitBlockAndInsertIfThenElse(Value *Cond, BasicBlock::iterator SplitBefore,
1640 BasicBlock *ThenBlock = nullptr;
1641 BasicBlock *ElseBlock = nullptr;
1651 Value *Cond, BasicBlock::iterator SplitBefore, BasicBlock **ThenBlock,
1652 BasicBlock **ElseBlock, bool UnreachableThen, bool UnreachableElse,
1660 SmallPtrSet<BasicBlock *, 8> UniqueOrigSuccessors;
1661 BasicBlock *Head = SplitBefore->getParent();
1668 BasicBlock *Tail = Head->splitBasicBlock(SplitBefore);
1669 BasicBlock *TrueBlock = Tail;
1670 BasicBlock *FalseBlock = Tail;
1675 auto handleBlock = [&](BasicBlock **PBB, bool Unreachable, BasicBlock *&BB,
1684 BB = BasicBlock::Create(C, "", Head->getParent(), Tail);
1713 for (BasicBlock *UniqueOrigSuccessor : UniqueOrigSuccessors)
1715 for (BasicBlock *UniqueOrigSuccessor : UniqueOrigSuccessors)
1733 BasicBlock::iterator SplitBefore) {
1734 BasicBlock *LoopPred = SplitBefore->getParent();
1735 BasicBlock *LoopBody = SplitBlock(SplitBefore->getParent(), SplitBefore);
1736 BasicBlock *LoopExit = SplitBlock(SplitBefore->getParent(), SplitBefore);
1760 ElementCount EC, Type *IndexTy, BasicBlock::iterator InsertBefore,
1784 Value *EVL, BasicBlock::iterator InsertBefore,
1804 BranchInst *llvm::GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue,
1805 BasicBlock *&IfFalse) {
1807 BasicBlock *Pred1 = nullptr;
1808 BasicBlock *Pred2 = nullptr;
1877 BasicBlock *CommonPred = Pred1->getSinglePredecessor();
1920 bool llvm::isPresplitCoroSuspendExitEdge(const BasicBlock &Src,
1921 const BasicBlock &Dest) {