Lines Matching full:blocks
19 /// of blocks with a single entry and no branches back to that entry. A region
37 /// use the "label" helper for the blocks we absolutely must and no others. We
81 // Calculates reachability in a region. Ignores branches to blocks outside of
86 ReachabilityGraph(MachineBasicBlock *Entry, const BlockSet &Blocks) in ReachabilityGraph() argument
87 : Entry(Entry), Blocks(Blocks) { in ReachabilityGraph()
90 for (auto *MBB : Blocks) { in ReachabilityGraph()
109 // "Loopers" are blocks that are in a loop. We detect these by finding blocks
113 // Get all blocks that are loop entries.
116 // Get all blocks that enter a particular loop from outside.
126 const BlockSet &Blocks; member in __anon63cd76cd0111::ReachabilityGraph
131 bool inRegion(MachineBasicBlock *MBB) const { return Blocks.count(MBB); } in inRegion()
133 // Maps a block to all the other blocks it can reach.
143 for (auto *MBB : Blocks) { in calculate()
167 // Blocks that can return to themselves are in a loop. in calculate()
168 for (auto *MBB : Blocks) { in calculate()
175 // Find the loop entries - loopers reachable from blocks not in that loop - in calculate()
176 // and those outside blocks that reach them, the "loop enterers". in calculate()
190 // Finds the blocks in a single-entry loop, given the loop entry and the
191 // list of blocks that enter the loop.
199 BlockSet &getBlocks() { return Blocks; } in getBlocks()
205 BlockSet Blocks; member in __anon63cd76cd0111::LoopBlocks
208 // Going backwards from the loop entry, if we ignore the blocks entering in calculate()
209 // from outside, we will traverse all the blocks in the loop. in calculate()
212 Blocks.insert(Entry); in calculate()
223 if (Blocks.insert(MBB).second) { in calculate()
240 bool processRegion(MachineBasicBlock *Entry, BlockSet &Blocks,
243 void makeSingleEntryLoop(BlockSet &Entries, BlockSet &Blocks,
252 MachineBasicBlock *Entry, BlockSet &Blocks, MachineFunction &MF) { in processRegion() argument
257 ReachabilityGraph Graph(Entry, Blocks); in processRegion()
284 // a group of blocks all of whom can reach each other. (We'll see the in processRegion()
298 makeSingleEntryLoop(MutualLoopEntries, Blocks, MF, Graph); in processRegion()
318 // to the graph are to add blocks on the way to a loop entry. As the in processRegion()
333 // a helper variable. Also updates Blocks with any new blocks created, so
334 // that we properly track all the blocks in the region. But this does not update
338 BlockSet &Entries, BlockSet &Blocks, MachineFunction &MF, in makeSingleEntryLoop() argument
361 Blocks.insert(Dispatch); in makeSingleEntryLoop()
389 // the bad blocks. For simplicity, we just introduce a new block for every in makeSingleEntryLoop()
425 // We need to create at most two routing blocks per entry: one for in makeSingleEntryLoop()
449 Blocks.insert(Routing); in makeSingleEntryLoop()
548 // Now we've inserted dispatch blocks, some register uses can have incoming in runOnMachineFunction()