Home | History | Annotate | Download | only in Analysis

Lines Matching refs:Loop

302       // If OuterLoop is an irreducible loop, we can't actually handle this.
311 // If "Pred" is a loop header, then this isn't really a backedge; rather,
313 // secondary loop headers.
324 const LoopData *OuterLoop, LoopData &Loop, Distribution &Dist) {
326 for (const auto &I : Loop.Exits)
327 if (!addToDist(Dist, OuterLoop, Loop.getHeader(), I.first,
335 /// \brief Get the maximum allowed loop scale.
337 /// Gives the maximum number of estimated iterations allowed for a loop. Very
341 /// \brief Compute the loop scale for a loop.
342 void BlockFrequencyInfoImplBase::computeLoopScale(LoopData &Loop) {
343 // Compute loop scale.
344 DEBUG(dbgs() << "compute-loop-scale: " << getLoopName(Loop) << "\n");
348 BlockMass ExitMass = BlockMass::getFull() - Loop.BackedgeMass;
351 Loop.Scale = ExitMass.toScaled().inverse();
354 << " - " << Loop.BackedgeMass << ")\n"
355 << " - scale = " << Loop.Scale << "\n");
357 if (Loop.Scale > getMaxLoopScale()) {
358 Loop.Scale = getMaxLoopScale();
363 /// \brief Package up a loop.
364 void BlockFrequencyInfoImplBase::packageLoop(LoopData &Loop) {
365 DEBUG(dbgs() << "packaging-loop: " << getLoopName(Loop) << "\n");
368 for (const BlockNode &M : Loop.Nodes) {
369 if (auto *Loop = Working[M.Index].getPackagedLoop())
370 Loop->Exits.clear();
373 Loop.IsPackaged = true;
407 // Backedges and exits only make sense if we're processing a loop.
408 assert(OuterLoop && "backedge or exit outside of loop");
450 /// \brief Unwrap a loop package.
452 /// Visits all the members of a loop, adjusting their BlockData according to
453 /// the loop's pseudo-node.
454 static void unwrapLoop(BlockFrequencyInfoImplBase &BFI, LoopData &Loop) {
455 DEBUG(dbgs() << "unwrap-loop-package: " << BFI.getLoopName(Loop)
456 << ": mass = " << Loop.Mass << ", scale = " << Loop.Scale
458 Loop.Scale *= Loop.Mass.toScaled();
459 Loop.IsPackaged = false;
460 DEBUG(dbgs() << " => combined-scale = " << Loop.Scale << "\n");
462 // Propagate the head scale through the loop. Since members are visited in
463 // RPO, the head scale will be updated by the loop scale first, and then the
465 for (const BlockNode &N : Loop.Nodes) {
469 Scaled64 New = Loop.Scale * F;
477 // Set initial frequencies from loop-local masses.
481 for (LoopData &Loop : Loops)
482 unwrapLoop(*this, Loop);
486 // Unwrap loop packages in reverse post-order, tracking min and max
524 BlockFrequencyInfoImplBase::getLoopName(const LoopData &Loop) const {
525 return getBlockName(Loop.getHeader()) + (Loop.isIrreducible() ? "**" : "*");
670 auto Loop = BFI.Loops.emplace(Insert, OuterLoop, Headers.begin(),
673 // Update loop hierarchy.
674 for (const auto &N : Loop->Nodes)
676 BFI.Working[N.Index].Loop->Parent = &*Loop;
678 BFI.Working[N.Index].Loop = &*Loop;