forked from OSchip/llvm-project
[MBP] Split placement and alignment into two functions. NFC.
Cut and Paste. llvm-svn: 268067
This commit is contained in:
parent
38e496b175
commit
e749ce53d4
|
@ -300,6 +300,7 @@ class MachineBlockPlacement : public MachineFunctionPass {
|
||||||
void rotateLoopWithProfile(BlockChain &LoopChain, MachineLoop &L,
|
void rotateLoopWithProfile(BlockChain &LoopChain, MachineLoop &L,
|
||||||
const BlockFilterSet &LoopBlockSet);
|
const BlockFilterSet &LoopBlockSet);
|
||||||
void buildCFGChains(MachineFunction &F);
|
void buildCFGChains(MachineFunction &F);
|
||||||
|
void alignBlocks(MachineFunction &F);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static char ID; // Pass identification, replacement for typeid
|
static char ID; // Pass identification, replacement for typeid
|
||||||
|
@ -1357,7 +1358,9 @@ void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
|
||||||
MachineBasicBlock *TBB = nullptr, *FBB = nullptr; // For AnalyzeBranch.
|
MachineBasicBlock *TBB = nullptr, *FBB = nullptr; // For AnalyzeBranch.
|
||||||
if (!TII->AnalyzeBranch(F.back(), TBB, FBB, Cond))
|
if (!TII->AnalyzeBranch(F.back(), TBB, FBB, Cond))
|
||||||
F.back().updateTerminator();
|
F.back().updateTerminator();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MachineBlockPlacement::alignBlocks(MachineFunction &F) {
|
||||||
// Walk through the backedges of the function now that we have fully laid out
|
// Walk through the backedges of the function now that we have fully laid out
|
||||||
// the basic blocks and align the destination of each backedge. We don't rely
|
// the basic blocks and align the destination of each backedge. We don't rely
|
||||||
// exclusively on the loop info here so that we can align backedges in
|
// exclusively on the loop info here so that we can align backedges in
|
||||||
|
@ -1366,6 +1369,7 @@ void MachineBlockPlacement::buildCFGChains(MachineFunction &F) {
|
||||||
// FIXME: Use Function::optForSize().
|
// FIXME: Use Function::optForSize().
|
||||||
if (F.getFunction()->hasFnAttribute(Attribute::OptimizeForSize))
|
if (F.getFunction()->hasFnAttribute(Attribute::OptimizeForSize))
|
||||||
return;
|
return;
|
||||||
|
BlockChain &FunctionChain = *BlockToChain[&F.front()];
|
||||||
if (FunctionChain.begin() == FunctionChain.end())
|
if (FunctionChain.begin() == FunctionChain.end())
|
||||||
return; // Empty chain.
|
return; // Empty chain.
|
||||||
|
|
||||||
|
@ -1442,6 +1446,7 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &F) {
|
||||||
assert(BlockToChain.empty());
|
assert(BlockToChain.empty());
|
||||||
|
|
||||||
buildCFGChains(F);
|
buildCFGChains(F);
|
||||||
|
alignBlocks(F);
|
||||||
|
|
||||||
BlockToChain.clear();
|
BlockToChain.clear();
|
||||||
ChainAllocator.DestroyAll();
|
ChainAllocator.DestroyAll();
|
||||||
|
|
Loading…
Reference in New Issue