Lines Matching refs:BasicBlock
19 #include "llvm/IR/BasicBlock.h"
37 BasicBlock *BB,
38 DenseMap<BasicBlock *, TrackingVH<MemoryAccess>> &CachedPreviousDef) {
49 if (BasicBlock *Pred = BB->getUniquePredecessor()) {
140 DenseMap<BasicBlock *, TrackingVH<MemoryAccess>> CachedPreviousDef;
173 BasicBlock *BB,
174 DenseMap<BasicBlock *, TrackingVH<MemoryAccess>> &CachedPreviousDef) {
264 SmallPtrSet<BasicBlock *, 16> Visited;
265 BasicBlock *StartBlock = MU->getBlock();
285 static void setMemoryPhiValueForBlock(MemoryPhi *MP, const BasicBlock *BB,
293 for (const BasicBlock *BlockBB : llvm::drop_begin(MP->blocks(), i)) {
364 SmallPtrSet<BasicBlock *, 2> DefiningBlocks;
375 SmallVector<BasicBlock *, 32> IDFBlocks;
398 DenseMap<BasicBlock *, TrackingVH<MemoryAccess>> CachedPreviousDef;
433 BasicBlock *StartBlock = MD->getBlock();
435 SmallPtrSet<BasicBlock *, 16> Visited;
463 SmallPtrSet<const BasicBlock *, 8> Seen;
464 SmallVector<const BasicBlock *, 16> Worklist;
494 const BasicBlock *FixupBlock = Worklist.pop_back_val();
531 void MemorySSAUpdater::removeEdge(BasicBlock *From, BasicBlock *To) {
538 void MemorySSAUpdater::removeDuplicatePhiEdgesBetween(const BasicBlock *From,
539 const BasicBlock *To) {
542 MPhi->unorderedDeleteIncomingIf([&](const MemoryAccess *, BasicBlock *B) {
596 void MemorySSAUpdater::cloneUsesAndDefs(BasicBlock *BB, BasicBlock *NewBB,
629 BasicBlock *Header, BasicBlock *Preheader, BasicBlock *BEBlock) {
640 BasicBlock *IBB = MPhi->getIncomingBlock(I);
668 ArrayRef<BasicBlock *> ExitBlocks,
675 BasicBlock *NewPhiBB = NewPhi->getBlock();
676 SmallPtrSet<BasicBlock *, 4> NewPhiBBPreds(pred_begin(NewPhiBB),
680 BasicBlock *IncBB = Phi->getIncomingBlock(It);
682 if (BasicBlock *NewIncBB = cast_or_null<BasicBlock>(VMap.lookup(IncBB)))
705 auto ProcessBlock = [&](BasicBlock *BB) {
706 BasicBlock *NewBlock = cast_or_null<BasicBlock>(VMap.lookup(BB));
722 for (auto *BB : llvm::concat<BasicBlock *const>(LoopBlocks, ExitBlocks))
725 for (auto *BB : llvm::concat<BasicBlock *const>(LoopBlocks, ExitBlocks))
732 BasicBlock *BB, BasicBlock *P1, const ValueToValueMapTy &VM) {
749 ArrayRef<BasicBlock *> ExitBlocks, Iter ValuesBegin, Iter ValuesEnd,
755 if (BasicBlock *NewExit = cast_or_null<BasicBlock>(VMap->lookup(Exit))) {
756 BasicBlock *ExitSucc = NewExit->getTerminator()->getSuccessor(0);
763 ArrayRef<BasicBlock *> ExitBlocks, const ValueToValueMapTy &VMap,
771 ArrayRef<BasicBlock *> ExitBlocks,
814 GraphDiff<BasicBlock *> GD(RevDeleteUpdates);
826 GraphDiff<BasicBlock *> GD;
837 GraphDiff<BasicBlock *> GD;
843 const GraphDiff<BasicBlock *> *GD) {
845 auto GetLastDef = [&](BasicBlock *BB) -> MemoryAccess * {
854 BasicBlock *Pred = nullptr;
891 [&](const SmallSetVector<BasicBlock *, 2> &BBSet) -> BasicBlock * {
892 BasicBlock *PrevIDom = *BBSet.begin();
901 [&](BasicBlock *PrevIDom, BasicBlock *CurrIDom,
902 SmallVectorImpl<BasicBlock *> &BlocksPrevDom) {
906 BasicBlock *NextIDom = PrevIDom;
907 while (BasicBlock *UpIDom =
931 SmallSetVector<BasicBlock *, 2> Added;
932 SmallSetVector<BasicBlock *, 2> Prev;
934 SmallDenseMap<BasicBlock *, PredInfo> PredMap;
937 BasicBlock *BB = Edge.getTo();
943 SmallDenseMap<std::pair<BasicBlock *, BasicBlock *>, int> EdgeCountMap;
944 SmallPtrSet<BasicBlock *, 2> NewBlocks;
976 SmallVector<BasicBlock *, 16> BlocksWithDefsToReplace;
982 BasicBlock *BB = Edge.getTo();
1001 SmallDenseMap<BasicBlock *, MemoryAccess *> LastDefAddedPred;
1056 BasicBlock *PrevIDom = FindNearestCommonDominator(PrevBlockSet);
1058 BasicBlock *NewIDom = DT.getNode(BB)->getIDom()->getBlock();
1068 SmallVector<BasicBlock *, 8> BlocksToProcess;
1074 SmallVector<BasicBlock *, 32> IDFBlocks;
1077 SmallPtrSet<BasicBlock *, 16> DefiningBlocks(BlocksToProcess.begin(),
1112 BasicBlock *DominatingBlock = DefToReplaceUses.getBlock();
1116 BasicBlock *DominatedBlock = UsrPhi->getIncomingBlock(U);
1120 BasicBlock *DominatedBlock = Usr->getBlock();
1141 void MemorySSAUpdater::moveTo(MemoryUseOrDef *What, BasicBlock *BB,
1175 void MemorySSAUpdater::moveToPlace(MemoryUseOrDef *What, BasicBlock *BB,
1187 void MemorySSAUpdater::moveAllAccesses(BasicBlock *From, BasicBlock *To,
1222 void MemorySSAUpdater::moveAllAfterSpliceBlocks(BasicBlock *From,
1223 BasicBlock *To,
1228 for (BasicBlock *Succ : successors(To))
1233 void MemorySSAUpdater::moveAllAfterMergeBlocks(BasicBlock *From, BasicBlock *To,
1238 for (BasicBlock *Succ : successors(From))
1244 BasicBlock *Old, BasicBlock *New, ArrayRef<BasicBlock *> Preds,
1259 SmallPtrSet<BasicBlock *, 16> PredsSet(Preds.begin(), Preds.end());
1266 Phi->unorderedDeleteIncomingIf([&](MemoryAccess *MA, BasicBlock *B) {
1348 const SmallSetVector<BasicBlock *, 8> &DeadBlocks) {
1350 for (BasicBlock *BB : DeadBlocks) {
1353 for (BasicBlock *Succ : successors(TI))
1366 for (BasicBlock *BB : DeadBlocks) {
1384 const BasicBlock *BB = I->getParent();
1393 for (const BasicBlock *Successor : successors(BB)) {
1405 Instruction *I, MemoryAccess *Definition, const BasicBlock *BB,
1412 Instruction *I, MemoryAccess *Definition, const BasicBlock *BB,