forked from OSchip/llvm-project
[MachineBlockPlacement] Make sure PreferredLoopExit is cleared everytime new loop is processed
Summary: Rotate on exit that actually exits the current loop. Reviewers: davidxl, danielcdh, iteratee, chandlerc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38563 llvm-svn: 314937
This commit is contained in:
parent
899809d531
commit
d8d97972de
|
@ -2233,9 +2233,19 @@ void MachineBlockPlacement::buildLoopChains(const MachineLoop &L) {
|
||||||
// If we selected just the header for the loop top, look for a potentially
|
// If we selected just the header for the loop top, look for a potentially
|
||||||
// profitable exit block in the event that rotating the loop can eliminate
|
// profitable exit block in the event that rotating the loop can eliminate
|
||||||
// branches by placing an exit edge at the bottom.
|
// branches by placing an exit edge at the bottom.
|
||||||
|
//
|
||||||
|
// Loops are processed innermost to uttermost, make sure we clear
|
||||||
|
// PreferredLoopExit before processing a new loop.
|
||||||
|
PreferredLoopExit = nullptr;
|
||||||
if (!RotateLoopWithProfile && LoopTop == L.getHeader())
|
if (!RotateLoopWithProfile && LoopTop == L.getHeader())
|
||||||
PreferredLoopExit = findBestLoopExit(L, LoopBlockSet);
|
PreferredLoopExit = findBestLoopExit(L, LoopBlockSet);
|
||||||
|
|
||||||
|
// Make sure PreferredLoopExit actually exits the current loop.
|
||||||
|
if (PreferredLoopExit) {
|
||||||
|
assert(L.isLoopExiting(PreferredLoopExit) &&
|
||||||
|
"not an exiting block of current loop");
|
||||||
|
}
|
||||||
|
|
||||||
BlockChain &LoopChain = *BlockToChain[LoopTop];
|
BlockChain &LoopChain = *BlockToChain[LoopTop];
|
||||||
|
|
||||||
// FIXME: This is a really lame way of walking the chains in the loop: we
|
// FIXME: This is a really lame way of walking the chains in the loop: we
|
||||||
|
|
Loading…
Reference in New Issue