Lines Matching refs:Loop
301 // If OuterLoop is an irreducible loop, we can't actually handle this.
310 // If "Pred" is a loop header, then this isn't really a backedge; rather,
312 // secondary loop headers.
323 const LoopData *OuterLoop, LoopData &Loop, Distribution &Dist) {
325 for (const auto &I : Loop.Exits)
326 if (!addToDist(Dist, OuterLoop, Loop.getHeader(), I.first,
334 /// \brief Compute the loop scale for a loop.
335 void BlockFrequencyInfoImplBase::computeLoopScale(LoopData &Loop) {
336 // Compute loop scale.
337 DEBUG(dbgs() << "compute-loop-scale: " << getLoopName(Loop) << "\n");
346 // appropriately describe the loop as having a large scale, without skewing
353 for (auto &Mass : Loop.BackedgeMass)
357 // Block scale stores the inverse of the scale. If this is an infinite loop,
359 // loop scale.
360 Loop.Scale =
365 << " - scale = " << Loop.Scale << "\n");
368 /// \brief Package up a loop.
369 void BlockFrequencyInfoImplBase::packageLoop(LoopData &Loop) {
370 DEBUG(dbgs() << "packaging-loop: " << getLoopName(Loop) << "\n");
373 for (const BlockNode &M : Loop.Nodes) {
374 if (auto *Loop = Working[M.Index].getPackagedLoop())
375 Loop->Exits.clear();
378 Loop.IsPackaged = true;
412 // Backedges and exits only make sense if we're processing a loop.
413 assert(OuterLoop && "backedge or exit outside of loop");
464 /// \brief Unwrap a loop package.
466 /// Visits all the members of a loop, adjusting their BlockData according to
467 /// the loop's pseudo-node.
468 static void unwrapLoop(BlockFrequencyInfoImplBase &BFI, LoopData &Loop) {
469 DEBUG(dbgs() << "unwrap-loop-package: " << BFI.getLoopName(Loop)
470 << ": mass = " << Loop.Mass << ", scale = " << Loop.Scale
472 Loop.Scale *= Loop.Mass.toScaled();
473 Loop.IsPackaged = false;
474 DEBUG(dbgs() << " => combined-scale = " << Loop.Scale << "\n");
476 loop. Since members are visited in
477 // RPO, the head scale will be updated by the loop scale first, and then the
479 for (const BlockNode &N : Loop.Nodes) {
483 Scaled64 New = Loop.Scale * F;
491 // Set initial frequencies from loop-local masses.
495 for (LoopData &Loop : Loops)
496 unwrapLoop(*this, Loop);
500 // Unwrap loop packages in reverse post-order, tracking min and max
545 BlockFrequencyInfoImplBase::getLoopName(const LoopData &Loop) const {
546 return getBlockName(Loop.getHeader()) + (Loop.isIrreducible() ? "**" : "*");
640 "Expected irreducible CFG; -loop-info is likely invalid");
692 auto Loop = BFI.Loops.emplace(Insert, OuterLoop, Headers.begin(),
695 // Update loop hierarchy.
696 for (const auto &N : Loop->Nodes)
698 BFI.Working[N.Index].Loop->Parent = &*Loop;
700 BFI.Working[N.Index].Loop = &*Loop;
735 void BlockFrequencyInfoImplBase::adjustLoopHeaderMass(LoopData &Loop) {
736 assert(Loop.isIrreducible() && "this only makes sense on irreducible loops");
738 // Since the loop has more than one header block, the mass flowing back into
739 // each header will be different. Adjust the mass in each header loop to
747 DEBUG(dbgs() << "adjust-loop-header-mass:\n");
748 for (uint32_t H = 0; H < Loop.NumHeaders; ++H) {
749 auto &HeaderNode = Loop.Nodes[H];
750 auto &BackedgeMass = Loop.BackedgeMass[Loop.getHeaderIndex(HeaderNode)];
761 DEBUG(dbgs() << " Distribute loop mass " << LoopMass