forked from OSchip/llvm-project
parent
db65737b1c
commit
4026b041ce
|
@ -145,10 +145,11 @@ bool CodeGenPrepare::runOnFunction(Function &F) {
|
||||||
return EverMadeChange;
|
return EverMadeChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EliminateMostlyEmptyBlocks - eliminate blocks that contain only PHI nodes
|
/// EliminateMostlyEmptyBlocks - eliminate blocks that contain only PHI nodes,
|
||||||
/// and an unconditional branch. Passes before isel (e.g. LSR/loopsimplify)
|
/// debug info directives, and an unconditional branch. Passes before isel
|
||||||
/// often split edges in ways that are non-optimal for isel. Start by
|
/// (e.g. LSR/loopsimplify) often split edges in ways that are non-optimal for
|
||||||
/// eliminating these blocks so we can split them the way we want them.
|
/// isel. Start by eliminating these blocks so we can split them the way we
|
||||||
|
/// want them.
|
||||||
bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) {
|
bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) {
|
||||||
bool MadeChange = false;
|
bool MadeChange = false;
|
||||||
// Note that this intentionally skips the entry block.
|
// Note that this intentionally skips the entry block.
|
||||||
|
@ -160,12 +161,18 @@ bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) {
|
||||||
if (!BI || !BI->isUnconditional())
|
if (!BI || !BI->isUnconditional())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// If the instruction before the branch isn't a phi node, then other stuff
|
// If the instruction before the branch (skipping debug info) isn't a phi
|
||||||
// is happening here.
|
// node, then other stuff is happening here.
|
||||||
BasicBlock::iterator BBI = BI;
|
BasicBlock::iterator BBI = BI;
|
||||||
if (BBI != BB->begin()) {
|
if (BBI != BB->begin()) {
|
||||||
--BBI;
|
--BBI;
|
||||||
if (!isa<PHINode>(BBI)) continue;
|
while (isa<DbgInfoIntrinsic>(BBI)) {
|
||||||
|
if (BBI == BB->begin())
|
||||||
|
break;
|
||||||
|
--BBI;
|
||||||
|
}
|
||||||
|
if (!isa<DbgInfoIntrinsic>(BBI) && !isa<PHINode>(BBI))
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not break infinite loops.
|
// Do not break infinite loops.
|
||||||
|
|
Loading…
Reference in New Issue