mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-12 14:20:55 +00:00
Add documentation for new backedge mass propagation in irregular loops.
Tweak test cases and rename headerIndexFor -> getHeaderIndex. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239915 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -226,7 +226,7 @@ public:
|
||||
BlockNode getHeader() const { return Nodes[0]; }
|
||||
bool isIrreducible() const { return NumHeaders > 1; }
|
||||
|
||||
HeaderMassList::difference_type headerIndexFor(const BlockNode &B) {
|
||||
HeaderMassList::difference_type getHeaderIndex(const BlockNode &B) {
|
||||
assert(isHeader(B) && "this is only valid on loop header blocks");
|
||||
if (isIrreducible())
|
||||
return std::lower_bound(Nodes.begin(), Nodes.begin() + NumHeaders, B) -
|
||||
@@ -716,6 +716,17 @@ void IrreducibleGraph::addEdges(const BlockNode &Node,
|
||||
/// - Distribute the mass accordingly, dithering to minimize mass loss,
|
||||
/// as described in \a distributeMass().
|
||||
///
|
||||
/// In the case of irreducible loops, instead of a single loop header,
|
||||
/// there will be several. The computation of backedge masses is similar
|
||||
/// but instead of having a single backedge mass, there will be one
|
||||
/// backedge per loop header. In these cases, each backedge will carry
|
||||
/// a mass proportional to the edge weights along the corresponding
|
||||
/// path.
|
||||
///
|
||||
/// At the end of propagation, the full mass assigned to the loop will be
|
||||
/// distributed among the loop headers proportionally according to the
|
||||
/// mass flowing through their backedges.
|
||||
///
|
||||
/// Finally, calculate the loop scale from the accumulated backedge mass.
|
||||
///
|
||||
/// 3. Distribute mass in the function (\a computeMassInFunction()).
|
||||
|
Reference in New Issue
Block a user