Lines Matching defs:SrcBlock
773 for (const FlowBlock &SrcBlock : Func.Blocks) {
774 // Verify if rebalancing rooted at SrcBlock is feasible
775 if (!canRebalanceAtRoot(&SrcBlock))
778 // Find an unknown subgraphs starting at SrcBlock. Along the way,
782 findUnknownSubgraph(&SrcBlock, KnownDstBlocks, UnknownBlocks);
787 if (!canRebalanceSubgraph(&SrcBlock, KnownDstBlocks, UnknownBlocks,
792 if (!isAcyclicSubgraph(&SrcBlock, DstBlock, UnknownBlocks))
796 rebalanceUnknownSubgraph(&SrcBlock, DstBlock, UnknownBlocks);
801 bool canRebalanceAtRoot(const FlowBlock *SrcBlock) {
804 if (SrcBlock->HasUnknownWeight || SrcBlock->Flow == 0)
809 for (auto *Jump : SrcBlock->SuccJumps) {
821 /// Find an unknown subgraph starting at block SrcBlock. The method sets
823 void findUnknownSubgraph(const FlowBlock *SrcBlock,
826 // Run BFS from SrcBlock and make sure all paths are going through unknown
831 Queue.push(SrcBlock->Index);
832 Visited[SrcBlock->Index] = true;
839 if (ignoreJump(SrcBlock, nullptr, Jump))
860 bool canRebalanceSubgraph(const FlowBlock *SrcBlock,
883 if (ignoreJump(SrcBlock, DstBlock, Jump))
896 /// rooted at basic block SrcBlock with the destination block, DstBlock.
897 bool ignoreJump(const FlowBlock *SrcBlock, const FlowBlock *DstBlock,
910 // Ignore jumps out of SrcBlock to known blocks
911 if (!JumpTarget->HasUnknownWeight && JumpSource == SrcBlock)
923 bool isAcyclicSubgraph(const FlowBlock *SrcBlock, const FlowBlock *DstBlock,
929 if (ignoreJump(SrcBlock, DstBlock, Jump))
934 fillInDegree(SrcBlock);
938 // A loop containing SrcBlock
939 if (LocalInDegree[SrcBlock->Index] > 0)
944 Queue.push(SrcBlock->Index);
953 if (Block->HasUnknownWeight && Block != SrcBlock)
958 if (ignoreJump(SrcBlock, DstBlock, Jump))
976 /// Rebalance a given subgraph rooted at SrcBlock, ending at DstBlock and
978 void rebalanceUnknownSubgraph(const FlowBlock *SrcBlock,
981 assert(SrcBlock->Flow > 0 && "zero-flow block in unknown subgraph");
985 // SrcBlock's flow is the sum of outgoing flows along non-ignored jumps
986 for (auto *Jump : SrcBlock->SuccJumps) {
987 if (ignoreJump(SrcBlock, DstBlock, Jump))
991 rebalanceBlock(SrcBlock, DstBlock, SrcBlock, BlockFlow);
1002 rebalanceBlock(SrcBlock, DstBlock, Block, BlockFlow);
1006 /// Redistribute flow for a block in a subgraph rooted at SrcBlock,
1008 void rebalanceBlock(const FlowBlock *SrcBlock, const FlowBlock *DstBlock,
1013 if (ignoreJump(SrcBlock, DstBlock, Jump))
1026 if (ignoreJump(SrcBlock, DstBlock, Jump))