diff options
author | Bill Wendling <isanbard@gmail.com> | 2012-11-28 23:23:48 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2012-11-28 23:23:48 +0000 |
commit | bf2ad736c70c24ae3108b22c5fd36f9f266aad68 (patch) | |
tree | 7d6d4028431ccfd31df630aeb866fa5b22e21137 /lib/Transforms/Scalar/CodeGenPrepare.cpp | |
parent | 021536888766ab8e0e27cd4c5f48ad6031399ca4 (diff) | |
download | llvm-bf2ad736c70c24ae3108b22c5fd36f9f266aad68.tar.gz llvm-bf2ad736c70c24ae3108b22c5fd36f9f266aad68.tar.bz2 llvm-bf2ad736c70c24ae3108b22c5fd36f9f266aad68.tar.xz |
When we delete a dead basic block, see if any of its successors are dead and
delete those as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168829 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/CodeGenPrepare.cpp')
-rw-r--r-- | lib/Transforms/Scalar/CodeGenPrepare.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/CodeGenPrepare.cpp b/lib/Transforms/Scalar/CodeGenPrepare.cpp index b608a5535e..61adb2dc12 100644 --- a/lib/Transforms/Scalar/CodeGenPrepare.cpp +++ b/lib/Transforms/Scalar/CodeGenPrepare.cpp @@ -194,9 +194,19 @@ bool CodeGenPrepare::runOnFunction(Function &F) { WorkList.insert(*II); } - for (SmallPtrSet<BasicBlock*, 8>::iterator - I = WorkList.begin(), E = WorkList.end(); I != E; ++I) - DeleteDeadBlock(*I); + // Delete the dead blocks and any of their dead successors. + while (!WorkList.empty()) { + BasicBlock *BB = *WorkList.begin(); + WorkList.erase(BB); + SmallVector<BasicBlock*, 2> Successors(succ_begin(BB), succ_end(BB)); + + DeleteDeadBlock(BB); + + for (SmallVectorImpl<BasicBlock*>::iterator + II = Successors.begin(), IE = Successors.end(); II != IE; ++II) + if (pred_begin(*II) == pred_end(*II)) + WorkList.insert(*II); + } // Merge pairs of basic blocks with unconditional branches, connected by // a single edge. |