Lines Matching defs:Chain

315   void merge(MachineBasicBlock *BB, BlockChain *Chain) {
320 if (!Chain) {
328 assert(BB == *Chain->begin() && "Passed BB is not head of Chain.");
329 assert(Chain->begin() != Chain->end());
333 for (MachineBasicBlock *ChainBB : *Chain) {
335 assert(BlockToChain[ChainBB] == Chain && "Incoming blocks not in chain.");
474 void markChainSuccessors(const BlockChain &Chain,
480 void markBlockSuccessors(const BlockChain &Chain, const MachineBasicBlock *BB,
485 collectViableSuccessors(const MachineBasicBlock *BB, const BlockChain &Chain,
495 const MachineBasicBlock *LoopHeaderBB, BlockChain &Chain,
501 BlockChain &Chain, BlockFilterSet *BlockFilter,
510 const BlockChain &Chain,
513 const BlockChain &Chain,
516 selectBestCandidateBlock(const BlockChain &Chain,
535 void buildChain(const MachineBasicBlock *BB, BlockChain &Chain,
571 BranchProbability QProb, const BlockChain &Chain,
577 const BlockChain &Chain, const BlockFilterSet *BlockFilter);
583 BranchProbability AdjustedSumProb, const BlockChain &Chain,
595 const BlockChain &Chain,
674 const BlockChain &Chain, const MachineBasicBlock *LoopHeaderBB,
678 for (MachineBasicBlock *MBB : Chain) {
679 markBlockSuccessors(Chain, MBB, LoopHeaderBB, BlockFilter);
690 const BlockChain &Chain, const MachineBasicBlock *MBB,
701 if (&Chain == &SuccChain || Succ == LoopHeaderBB)
723 const MachineBasicBlock *BB, const BlockChain &Chain,
749 if (SuccChain == &Chain) {
831 BranchProbability QProb, const BlockChain &Chain,
860 collectViableSuccessors(Succ, Chain, BlockFilter, SuccSuccs);
889 BlockToChain[SuccPred] == &Chain ||
964 Chain, BlockFilter))
986 const BlockChain &Chain, const BlockFilterSet *BlockFilter) {
1010 PredChain == &Chain || PredChain == BlockToChain[Succ])
1081 BranchProbability AdjustedSumProb, const BlockChain &Chain,
1102 BlockToChain[SuccPred] == &Chain ||
1134 canTailDuplicateUnplacedPreds(BB, Succ2, Chain, BlockFilter) &&
1136 Chain, BlockFilter)) {
1165 const BlockChain &Chain, const BlockFilterSet *BlockFilter) {
1182 (BlockToChain[Pred] == &Chain && !Succ->succ_empty()))
1357 TriangleChain Chain = std::move(Found->second);
1359 Chain.append(PDom);
1360 TriangleChainMap.insert(std::make_pair(Chain.getKey(), std::move(Chain)));
1372 TriangleChain &Chain = ChainPair.second;
1376 if (Chain.count() < TriangleChainCount)
1378 MachineBasicBlock *dst = Chain.Edges.back();
1379 Chain.Edges.pop_back();
1380 for (MachineBasicBlock *src : reverse(Chain.Edges)) {
1425 /// \p Chain: The chain that BB belongs to and Succ is being considered for.
1431 BranchProbability RealSuccProb, const BlockChain &Chain,
1561 (BlockFilter && !BlockFilter->count(Pred)) || PredChain == &Chain ||
1610 const BlockChain &Chain,
1619 collectViableSuccessors(BB, Chain, BlockFilter, Successors);
1632 SuccChain != &Chain && Succ == *SuccChain->begin())
1638 if (isTrellis(BB, Successors, Chain, BlockFilter))
1639 return getBestTrellisSuccessor(BB, Successors, AdjustedSumProb, Chain,
1656 Chain, BlockFilter)) {
1694 if (canTailDuplicateUnplacedPreds(BB, Succ, Chain, BlockFilter) &&
1695 (isProfitableToTailDup(BB, Succ, BestProb, Chain, BlockFilter))) {
1722 const BlockChain &Chain, SmallVectorImpl<MachineBasicBlock *> &WorkList) {
1728 return BlockToChain.lookup(BB) == &Chain;
1743 if (&SuccChain == &Chain)
1834 BlockChain &Chain = *BlockToChain[MBB];
1835 if (!UpdatedPreds.insert(&Chain).second)
1839 Chain.UnscheduledPredecessors == 0 &&
1841 for (MachineBasicBlock *ChainBB : Chain) {
1842 assert(BlockToChain[ChainBB] == &Chain &&
1847 if (BlockToChain[Pred] == &Chain)
1849 ++Chain.UnscheduledPredecessors;
1853 if (Chain.UnscheduledPredecessors != 0)
1856 MachineBasicBlock *BB = *Chain.begin();
1864 BlockChain &Chain,
1867 assert(BlockToChain[HeadBB] == &Chain && "BlockToChainMap mis-match.\n");
1874 markChainSuccessors(Chain, LoopHeaderBB, BlockFilter);
1875 MachineBasicBlock *BB = *std::prev(Chain.end());
1878 assert(BlockToChain[BB] == &Chain && "BlockToChainMap mis-match in loop.");
1879 assert(*std::prev(Chain.end()) == BB && "BB Not found at end of chain.");
1883 auto Result = selectBestSuccessor(BB, Chain, BlockFilter);
1888 BB, BestSucc, Chain, BlockFilter));
1894 BestSucc = selectBestCandidateBlock(Chain, BlockWorkList);
1896 BestSucc = selectBestCandidateBlock(Chain, EHPadWorkList);
1900 BestSucc = getFirstUnplacedBlock(Chain, PrevUnplacedBlockInFilterIt,
1903 BestSucc = getFirstUnplacedBlock(Chain, PrevUnplacedBlockIt);
1914 repeatedlyTailDuplicateBlock(BestSucc, BB, LoopHeaderBB, Chain,
1931 Chain.merge(BestSucc, &SuccChain);
1932 BB = *std::prev(Chain.end());
1936 << getBlockName(*Chain.begin()) << "\n");
2238 BlockChain &Chain = *BlockToChain[MBB];
2241 if (MBB != *std::prev(Chain.end()))
2258 if (&Chain == &SuccChain) {
2629 BlockChain *Chain = BlockToChain[LoopBB];
2630 for (MachineBasicBlock *ChainBB : *Chain)
2712 << " Chain header: " << getBlockName(*LoopChain.begin()) << "\n";
2722 << " Chain header: " << getBlockName(*LoopChain.begin()) << "\n"
2732 << " Chain header: " << getBlockName(*LoopChain.begin()) << "\n"
2749 BlockChain *Chain =
2767 Chain->merge(NextBB, nullptr);
3092 /// \p Chain - Chain to which \p LPred belongs, and \p BB will belong.
3103 const MachineBasicBlock *LoopHeaderBB, BlockChain &Chain,
3109 BB, LPred, Chain, BlockFilter, PrevUnplacedBlockIt,
3120 // The removal callback causes Chain.end() to be updated when a block is
3125 BlockChain::iterator ChainEnd = Chain.end();
3128 if (ChainEnd == Chain.begin())
3132 DupBB, DupPred, Chain, BlockFilter, PrevUnplacedBlockIt,
3140 LPred = *std::prev(Chain.end());
3142 markBlockSuccessors(Chain, LPred, LoopHeaderBB, BlockFilter);
3149 /// \p Chain - Chain to which \p LPred belongs, and \p BB will belong.
3160 MachineBasicBlock *BB, MachineBasicBlock *LPred, BlockChain &Chain,
3180 // Remove from the Chain and Chain Map
3182 BlockChain *Chain = It->second;
3183 InWorkList = Chain->UnscheduledPredecessors == 0;
3184 Chain->remove(RemBB);
3258 PredChain == &Chain)
3264 if (NewChain != &Chain && NewChain != PredChain)