diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-25 04:38:32 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-04-25 04:38:32 +0000 |
| commit | 3f086789ff4e41604d7d84f86fbc8b73c3fcea18 (patch) | |
| tree | 4446cdcca163b4186f2f63a03080c756ad3da42a | |
| parent | 71f07451b6ecf17be92ddbe4372a2171c8b77f91 (diff) | |
| download | bcm5719-llvm-3f086789ff4e41604d7d84f86fbc8b73c3fcea18.tar.gz bcm5719-llvm-3f086789ff4e41604d7d84f86fbc8b73c3fcea18.zip | |
blockfreq: Document high-level functions
<rdar://problem/14292693>
llvm-svn: 207191
| -rw-r--r-- | llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h | 37 | ||||
| -rw-r--r-- | llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp | 2 |
2 files changed, 37 insertions, 2 deletions
diff --git a/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h b/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h index 0632963e1e1..43484a8668c 100644 --- a/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h +++ b/llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h @@ -1365,12 +1365,47 @@ template <class BT> class BlockFrequencyInfoImpl : BlockFrequencyInfoImplBase { return RPOT[Node.Index]; } + /// \brief Run (and save) a post-order traversal. + /// + /// Saves a reverse post-order traversal of all the nodes in \a F. void initializeRPOT(); + + /// \brief Initialize loop data. + /// + /// Build up \a Loops using \a LoopInfo. \a LoopInfo gives us a mapping from + /// each block to the deepest loop it's in, but we need the inverse. For each + /// loop, we store in reverse post-order its "immediate" members, defined as + /// the header, the headers of immediate sub-loops, and all other blocks in + /// the loop that are not in sub-loops. void initializeLoops(); + /// \brief Propagate to a block's successors. + /// + /// In the context of distributing mass through \c OuterLoop, divide the mass + /// currently assigned to \c Node between its successors. void propagateMassToSuccessors(LoopData *OuterLoop, const BlockNode &Node); - void computeMassInLoops(); + + /// \brief Compute mass in a particular loop. + /// + /// Assign mass to \c Loop's header, and then for each block in \c Loop in + /// reverse post-order, distribute mass to its successors. Only visits nodes + /// that have not been packaged into sub-loops. + /// + /// \pre \a computeMassInLoop() has been called for each subloop of \c Loop. void computeMassInLoop(LoopData &Loop); + + /// \brief Compute mass in all loops. + /// + /// For each loop bottom-up, call \a computeMassInLoop(). + void computeMassInLoops(); + + /// \brief Compute mass in the top-level function. + /// + /// Assign mass to the entry block, and then for each block in reverse + /// post-order, distribute mass to its successors. Skips nodes that have + /// been packaged into loops. + /// + /// \pre \a computeMassInLoops() has been called. void computeMassInFunction(); std::string getBlockName(const BlockNode &Node) const override { diff --git a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp index 6349b780744..a41ec4527e8 100644 --- a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -815,7 +815,7 @@ static void unwrapLoop(BlockFrequencyInfoImplBase &BFI, LoopData &Loop) { << "\n"); Loop.Scale *= Loop.Mass.toFloat(); Loop.IsPackaged = false; - DEBUG(dbgs() << " => combined-scale = " << Loop.Scale << "\n"); + DEBUG(dbgs() << " => combined-scale = " << Loop.Scale << "\n"); // Propagate the head scale through the loop. Since members are visited in // RPO, the head scale will be updated by the loop scale first, and then the |

