diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-25 18:47:04 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-25 18:47:04 +0000 |
commit | 2d18167483cf274413e52b4fa9513a7dffa6a7f8 (patch) | |
tree | bd3bb9ad0008003007574b0df794ccdc6b70d688 /lib/Analysis/BlockFrequencyInfoImpl.cpp | |
parent | eae0809a6067bb0575854a10d1e1e8ca0b6ef568 (diff) | |
download | llvm-2d18167483cf274413e52b4fa9513a7dffa6a7f8.tar.gz llvm-2d18167483cf274413e52b4fa9513a7dffa6a7f8.tar.bz2 llvm-2d18167483cf274413e52b4fa9513a7dffa6a7f8.tar.xz |
blockfreq: Further shift logic to LoopData
Move a lot of the loop-related logic that was sprinkled around the code
into `LoopData`.
<rdar://problem/14292693>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207258 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BlockFrequencyInfoImpl.cpp')
-rw-r--r-- | lib/Analysis/BlockFrequencyInfoImpl.cpp | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/lib/Analysis/BlockFrequencyInfoImpl.cpp b/lib/Analysis/BlockFrequencyInfoImpl.cpp index 744bbe2fe9..2fcd9b8377 100644 --- a/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -568,21 +568,6 @@ static void cleanup(BlockFrequencyInfoImplBase &BFI) { BFI.Freqs = std::move(SavedFreqs); } -/// \brief Get the appropriate mass for a possible pseudo-node loop package. -/// -/// Get appropriate mass for Node. If Node is a loop-header (whose loop has -/// been packaged), returns the mass of its pseudo-node. If it's a node inside -/// a packaged loop, it returns the loop's pseudo-node. -static BlockMass &getPackageMass(BlockFrequencyInfoImplBase &BFI, - const BlockNode &Node) { - assert(Node.isValid()); - assert(!BFI.Working[Node.Index].isPackaged()); - if (!BFI.Working[Node.Index].isAPackage()) - return BFI.Working[Node.Index].Mass; - - return BFI.getLoopPackage(Node).Mass; -} - void BlockFrequencyInfoImplBase::addToDist(Distribution &Dist, const LoopData *OuterLoop, const BlockNode &Pred, @@ -595,11 +580,13 @@ void BlockFrequencyInfoImplBase::addToDist(Distribution &Dist, return OuterLoop && OuterLoop->isHeader(Node); }; + BlockNode Resolved = Working[Succ.Index].getResolvedNode(); + #ifndef NDEBUG - auto debugSuccessor = [&](const char *Type, const BlockNode &Resolved) { + auto debugSuccessor = [&](const char *Type) { dbgs() << " =>" << " [" << Type << "] weight = " << Weight; - if (!isLoopHeader(Succ)) + if (!isLoopHeader(Resolved)) dbgs() << ", succ = " << getBlockName(Succ); if (Resolved != Succ) dbgs() << ", resolved = " << getBlockName(Resolved); @@ -608,27 +595,25 @@ void BlockFrequencyInfoImplBase::addToDist(Distribution &Dist, (void)debugSuccessor; #endif - if (isLoopHeader(Succ)) { - DEBUG(debugSuccessor("backedge", Succ)); + if (isLoopHeader(Resolved)) { + DEBUG(debugSuccessor("backedge")); Dist.addBackedge(OuterLoop->getHeader(), Weight); return; } - BlockNode Resolved = getPackagedNode(Succ); - assert(!isLoopHeader(Resolved)); if (Working[Resolved.Index].getContainingLoop() != OuterLoop) { - DEBUG(debugSuccessor(" exit ", Resolved)); + DEBUG(debugSuccessor(" exit ")); Dist.addExit(Resolved, Weight); return; } if (Resolved < Pred) { - // Irreducible backedge. Skip this edge in the distribution. - DEBUG(debugSuccessor("skipped ", Resolved)); + // Irreducible backedge. Skip. + DEBUG(debugSuccessor(" skip ")); return; } - DEBUG(debugSuccessor(" local ", Resolved)); + DEBUG(debugSuccessor(" local ")); Dist.addLocal(Resolved, Weight); } @@ -685,7 +670,7 @@ void BlockFrequencyInfoImplBase::packageLoop(LoopData &Loop) { void BlockFrequencyInfoImplBase::distributeMass(const BlockNode &Source, LoopData *OuterLoop, Distribution &Dist) { - BlockMass Mass = getPackageMass(*this, Source); + BlockMass Mass = Working[Source.Index].getMass(); DEBUG(dbgs() << " => mass: " << Mass << "\n"); // Distribute mass to successors as laid out in Dist. @@ -708,7 +693,7 @@ void BlockFrequencyInfoImplBase::distributeMass(const BlockNode &Source, // Check for a local edge (non-backedge and non-exit). BlockMass Taken = D.takeMass(W.Amount); if (W.Type == Weight::Local) { - getPackageMass(*this, W.TargetNode) += Taken; + Working[W.TargetNode.Index].getMass() += Taken; DEBUG(debugAssign(W.TargetNode, Taken, nullptr)); continue; } |