summaryrefslogtreecommitdiff
path: root/lib/Analysis/BlockFrequencyInfoImpl.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-04-25 18:47:04 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-04-25 18:47:04 +0000
commit2d18167483cf274413e52b4fa9513a7dffa6a7f8 (patch)
treebd3bb9ad0008003007574b0df794ccdc6b70d688 /lib/Analysis/BlockFrequencyInfoImpl.cpp
parenteae0809a6067bb0575854a10d1e1e8ca0b6ef568 (diff)
downloadllvm-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.cpp39
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;
}