diff options
author | Dan Gohman <gohman@apple.com> | 2010-08-14 00:29:42 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-08-14 00:29:42 +0000 |
commit | 4a63fad976c8cf3bcdc1bbc3927668164890ecb8 (patch) | |
tree | e6591471e46231800e73582000d2b83f65c0e505 /llvm/lib/Transforms/Utils/Local.cpp | |
parent | a030fa529701850bc299a486b05e8f1bd4911ada (diff) | |
download | bcm5719-llvm-4a63fad976c8cf3bcdc1bbc3927668164890ecb8.tar.gz bcm5719-llvm-4a63fad976c8cf3bcdc1bbc3927668164890ecb8.zip |
Teach SimplifyCFG how to simplify indirectbr instructions.
- Eliminate redundant successors.
- Convert an indirectbr with one successor into a direct branch.
Also, generalize SimplifyCFG to be able to be run on a function entry block.
It knows quite a few simplifications which are applicable to the entry
block, and it only needs a few checks to avoid trouble with the entry block.
llvm-svn: 111060
Diffstat (limited to 'llvm/lib/Transforms/Utils/Local.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 8e9113871f4..52f0499f39b 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -490,6 +490,9 @@ static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) { /// rewriting all the predecessors to branch to the successor block and return /// true. If we can't transform, return false. bool llvm::TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB) { + assert(BB != &BB->getParent()->getEntryBlock() && + "TryToSimplifyUncondBranchFromEmptyBlock called on entry block!"); + // We can't eliminate infinite loops. BasicBlock *Succ = cast<BranchInst>(BB->getTerminator())->getSuccessor(0); if (BB == Succ) return false; |