Lines Matching refs:Block

82 class Block;
115 using BlockPair = std::pair<Block *, Block *>;
117 using BlockIter = std::vector<Block *>::const_iterator;
151 class Block { class
153 Block(const Block &) = delete;
154 Block(Block &&) = default;
155 Block &operator=(const Block &) = delete;
156 Block &operator=(Block &&) = default;
173 Block *FallthroughSucc{nullptr};
175 Block *FallthroughPred{nullptr};
177 std::vector<std::pair<Block *, uint64_t>> OutJumps;
179 std::vector<std::pair<Block *, uint64_t>> InJumps;
186 explicit Block(BinaryBasicBlock *BB_, uint64_t Size_) in Block() function in llvm::bolt::Block
190 bool adjacent(const Block *Other) const { in adjacent()
194 bool hasOutJump(const Block *Other) const { in hasOutJump()
195 for (std::pair<Block *, uint64_t> Jump : OutJumps) { in hasOutJump()
202 bool hasInJump(const Block *Other) const { in hasInJump()
203 for (std::pair<Block *, uint64_t> Jump : InJumps) { in hasInJump()
219 explicit Chain(size_t Id, Block *Block) in Chain() argument
220 : Id(Id), IsEntry(Block->Index == 0), in Chain()
221 ExecutionCount(Block->ExecutionCount), Size(Block->Size), Score(0), in Chain()
222 Blocks(1, Block) {} in Chain()
238 const std::vector<Block *> &blocks() const { return Blocks; } in blocks()
262 void merge(Chain *Other, const std::vector<Block *> &MergedBlocks) { in merge()
289 std::vector<Block *> Blocks;
304 explicit Edge(Block *SrcBlock, Block *DstBlock, uint64_t EC) in Edge()
317 void appendJump(Block *SrcBlock, Block *DstBlock, uint64_t EC) { in appendJump()
408 std::vector<Block *> getBlocks() const { in getBlocks()
409 std::vector<Block *> Result; in getBlocks()
418 const Block *getFirstBlock() const { return *Begin1; } in getFirstBlock()
481 for (Block &Block : AllBlocks) { in initialize()
482 auto BI = Block.BB->branch_info_begin(); in initialize()
483 for (BinaryBasicBlock *SuccBB : Block.BB->successors()) { in initialize()
486 if (SuccBB != Block.BB && BI->Count > 0) { in initialize()
487 class Block &SuccBlock = AllBlocks[SuccBB->getLayoutIndex()]; in initialize()
490 SuccBlock.InJumps.emplace_back(&Block, Count); in initialize()
491 Block.OutWeight += Count; in initialize()
492 Block.OutJumps.emplace_back(&SuccBlock, Count); in initialize()
502 for (Block &Block : AllBlocks) { in initialize()
503 size_t Index = Block.Index; in initialize()
504 Block.ExecutionCount = std::max(Block.ExecutionCount, Block.InWeight); in initialize()
505 Block.ExecutionCount = std::max(Block.ExecutionCount, Block.OutWeight); in initialize()
506 if (Index == 0 && Block.ExecutionCount == 0) in initialize()
507 Block.ExecutionCount = 1; in initialize()
513 for (Block &Block : AllBlocks) { in initialize()
514 AllChains.emplace_back(Block.Index, &Block); in initialize()
515 Block.CurChain = &AllChains.back(); in initialize()
516 if (Block.ExecutionCount > 0) in initialize()
522 for (Block &Block : AllBlocks) { in initialize()
523 for (std::pair<class Block *, uint64_t> &Jump : Block.OutJumps) { in initialize()
524 class Block *const SuccBlock = Jump.first; in initialize()
525 Edge *CurEdge = Block.CurChain->getEdge(SuccBlock->CurChain); in initialize()
528 assert(SuccBlock->CurChain->getEdge(Block.CurChain) != nullptr); in initialize()
529 CurEdge->appendJump(&Block, SuccBlock, Jump.second); in initialize()
533 AllEdges.emplace_back(&Block, SuccBlock, Jump.second); in initialize()
534 Block.CurChain->addEdge(SuccBlock->CurChain, &AllEdges.back()); in initialize()
535 SuccBlock->CurChain->addEdge(Block.CurChain, &AllEdges.back()); in initialize()
547 for (Block &Block : AllBlocks) { in mergeFallthroughs()
548 if (Block.BB->succ_size() == 1 && in mergeFallthroughs()
549 Block.BB->getSuccessor()->pred_size() == 1 && in mergeFallthroughs()
550 Block.BB->getSuccessor()->getLayoutIndex() != 0) { in mergeFallthroughs()
551 size_t SuccIndex = Block.BB->getSuccessor()->getLayoutIndex(); in mergeFallthroughs()
552 Block.FallthroughSucc = &AllBlocks[SuccIndex]; in mergeFallthroughs()
553 AllBlocks[SuccIndex].FallthroughPred = &Block; in mergeFallthroughs()
557 if (Block.OutWeight == 0) in mergeFallthroughs()
559 for (std::pair<class Block *, uint64_t> &Edge : Block.OutJumps) { in mergeFallthroughs()
560 class Block *const SuccBlock = Edge.first; in mergeFallthroughs()
562 if (Block.OutWeight == Edge.second && in mergeFallthroughs()
564 Block.FallthroughSucc = SuccBlock; in mergeFallthroughs()
565 SuccBlock->FallthroughPred = &Block; in mergeFallthroughs()
574 for (Block &Block : AllBlocks) { in mergeFallthroughs()
575 if (Block.FallthroughSucc == nullptr || Block.FallthroughPred == nullptr) in mergeFallthroughs()
578 class Block *SuccBlock = Block.FallthroughSucc; in mergeFallthroughs()
579 while (SuccBlock != nullptr && SuccBlock != &Block) in mergeFallthroughs()
585 AllBlocks[Block.FallthroughPred->Index].FallthroughSucc = nullptr; in mergeFallthroughs()
586 Block.FallthroughPred = nullptr; in mergeFallthroughs()
590 for (Block &Block : AllBlocks) { in mergeFallthroughs()
591 if (Block.FallthroughPred == nullptr && in mergeFallthroughs()
592 Block.FallthroughSucc != nullptr) { in mergeFallthroughs()
593 class Block *CurBlock = &Block; in mergeFallthroughs()
595 class Block *const NextBlock = CurBlock->FallthroughSucc; in mergeFallthroughs()
596 mergeChains(Block.CurChain, NextBlock->CurChain, 0, MergeTypeTy::X_Y); in mergeFallthroughs()
675 [&](const Block *BB) { in score()
682 for (const std::pair<std::pair<Block *, Block *>, uint64_t> &Jump : Jumps) { in score()
683 const Block *SrcBlock = Jump.first.first; in score()
684 const Block *DstBlock = Jump.first.second; in score()
716 Block *BB1 = ChainPred->blocks()[Offset - 1]; in mergeGain()
717 Block *BB2 = ChainPred->blocks()[Offset]; in mergeGain()
762 MergedChain mergeBlocks(const std::vector<Block *> &X, in mergeBlocks()
763 const std::vector<Block *> &Y, size_t MergeOffset, in mergeBlocks()
846 for (Block *Block : Chain->blocks()) in concatChains()
847 Order.push_back(Block->BB); in concatChains()
855 std::vector<Block> AllBlocks;