diff options
| author | Dale Johannesen <dalej@apple.com> | 2009-03-27 01:13:37 +0000 |
|---|---|---|
| committer | Dale Johannesen <dalej@apple.com> | 2009-03-27 01:13:37 +0000 |
| commit | 4026b041ce7d5a2bebdcd98d1958dba2b6c999cd (patch) | |
| tree | 0a9cba687e0f3092eed74474a3691acd4412e9a6 /llvm/lib/Transforms | |
| parent | db65737b1c6f7a78560347967e7aa9faecff6092 (diff) | |
| download | bcm5719-llvm-4026b041ce7d5a2bebdcd98d1958dba2b6c999cd.tar.gz bcm5719-llvm-4026b041ce7d5a2bebdcd98d1958dba2b6c999cd.zip | |
One more place to skip debug info.
llvm-svn: 67811
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp b/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp index b0214e030da..4eb49e9a95c 100644 --- a/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp +++ b/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp @@ -145,10 +145,11 @@ bool CodeGenPrepare::runOnFunction(Function &F) { return EverMadeChange; } -/// EliminateMostlyEmptyBlocks - eliminate blocks that contain only PHI nodes -/// and an unconditional branch. Passes before isel (e.g. LSR/loopsimplify) -/// often split edges in ways that are non-optimal for isel. Start by -/// eliminating these blocks so we can split them the way we want them. +/// EliminateMostlyEmptyBlocks - eliminate blocks that contain only PHI nodes, +/// debug info directives, and an unconditional branch. Passes before isel +/// (e.g. LSR/loopsimplify) often split edges in ways that are non-optimal for +/// isel. Start by eliminating these blocks so we can split them the way we +/// want them. bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) { bool MadeChange = false; // Note that this intentionally skips the entry block. @@ -160,12 +161,18 @@ bool CodeGenPrepare::EliminateMostlyEmptyBlocks(Function &F) { if (!BI || !BI->isUnconditional()) continue; - // If the instruction before the branch isn't a phi node, then other stuff - // is happening here. + // If the instruction before the branch (skipping debug info) isn't a phi + // node, then other stuff is happening here. BasicBlock::iterator BBI = BI; if (BBI != BB->begin()) { --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. |

