Home | History | Annotate | Download | only in CodeGen

Lines Matching defs:loop

32 INITIALIZE_PASS_BEGIN(LoopSplitter, "loop-splitting",
33 "Split virtual regists across loop boundaries.", false, false)
38 INITIALIZE_PASS_END(LoopSplitter, "loop-splitting",
39 "Split virtual regists across loop boundaries.", false, false)
56 LoopSplit(LoopSplitter &ls, LiveInterval &li, MachineLoop &loop)
57 : ls(ls), li(li), loop(loop), valid(true), inSplit(false), newLI(0) {
64 MachineLoop& getLoop() const { return loop; }
89 MachineLoop &loop;
123 MachineBasicBlock *preHeader = loop.getLoopPreheader();
125 assert(ls.canInsertPreHeader(loop) &&
127 preHeader = &ls.insertPreHeader(loop);
165 outBlock = &ls.splitEdge(edge, loop);
198 ls.getLoopSubRange(lr, loop);
232 for (MachineLoop::block_iterator bbItr = loop.block_begin(),
233 bbEnd = loop.block_end();
301 // MachineLoop &loop = *loops.front();
303 // std::copy(loop.begin(), loop.end(), std::back_inserter(loops));
305 // dumpLoopInfo(loop);
368 void LoopSplitter::dumpLoopInfo(MachineLoop &loop) {
369 MachineBasicBlock &headerBlock = *loop.getHeader();
372 loop.getExitEdges(exitEdges);
376 subBlockItr = loop.getBlocks().begin(),
377 subBlockEnd = loop.getBlocks().end();
390 dbgs() << "], Sub-Loop Headers: [ ";
391 for (MachineLoop::iterator subLoopItr = loop.begin(),
392 subLoopEnd = loop.end();
412 bool LoopSplitter::canInsertPreHeader(MachineLoop &loop) {
413 MachineBasicBlock *header = loop.getHeader();
435 MachineBasicBlock& LoopSplitter::insertPreHeader(MachineLoop &loop) {
436 assert(loop.getLoopPreheader() == 0 && "Loop already has preheader.");
438 MachineBasicBlock &header = *loop.getHeader();
447 if (!loop.contains(*predItr))
479 if (MachineLoop *parentLoop = loop.getParentLoop()) {
480 assert(parentLoop->getHeader() != loop.getHeader() &&
481 "Parent loop has same header?");
484 // Invalidate all parent loop ranges.
560 MachineLoop &loop) {
589 loopRangeMap.erase(&loop);
591 MachineLoop *splitParentLoop = loop.getParentLoop();
598 assert(splitParentLoop->contains(&loop) &&
599 "Split-block parent doesn't contain original loop?");
602 // Invalidate all parent loop ranges.
638 LoopSplitter::LoopRanges& LoopSplitter::getLoopRanges(MachineLoop &loop) {
640 LoopRangeMap::iterator lrItr = loopRangeMap.find(&loop);
643 std::copy(loop.block_begin(), loop.block_end(),
646 assert(!loopMBBs.empty() && "No blocks in loop?");
648 LoopRanges &loopRanges = loopRangeMap[&loop];
649 assert(loopRanges.empty() && "Loop encountered but not processed?");
676 MachineLoop &loop) {
677 LoopRanges &loopRanges = getLoopRanges(loop);
695 void LoopSplitter::dumpLoopRanges(MachineLoop &loop) {
696 LoopRanges &loopRanges = getLoopRanges(loop);
697 dbgs() << "For loop MBB#" << loop.getHeader()->getNumber() << ", subranges are: [ ";
707 //dbgs() << " Processing loop header BB#" << header.getNumber() << "\n";
738 //dbgs() << " Processing loop exits:\n";
778 bool LoopSplitter::splitOverLoop(LiveInterval &li, MachineLoop &loop) {
782 LoopSplit split(*this, li, loop);
802 MachineLoop &loop = *loops.front();
806 << loop.getHeader()->getNumber() << " ";
808 if (!splitOverLoop(li, loop)) {
809 // Couldn't split over outer loop, schedule sub-loops to be checked.
810 std::copy(loop.begin(), loop.end(), std::back_inserter(loops));