diff options
| author | Xin Tong <trent.xin.tong@gmail.com> | 2017-03-07 18:59:09 +0000 |
|---|---|---|
| committer | Xin Tong <trent.xin.tong@gmail.com> | 2017-03-07 18:59:09 +0000 |
| commit | ac2b5767afb8362bd86a0cb73bb9b528097ca22f (patch) | |
| tree | f809399816e343846cc6a50d90f2096449b7dc80 /llvm/lib/Transforms | |
| parent | 70a3671222600305e27f92c03a21ccea39624dca (diff) | |
| download | bcm5719-llvm-ac2b5767afb8362bd86a0cb73bb9b528097ca22f.tar.gz bcm5719-llvm-ac2b5767afb8362bd86a0cb73bb9b528097ca22f.zip | |
[JumpThread] Simplify CmpInst-as-Condition branch-folding a bit.
Summary: Simplify CmpInst-as-Condition branch-folding a bit.
Reviewers: sanjoy, efriedma
Reviewed By: efriedma
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30429
llvm-svn: 297186
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/JumpThreading.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index fb784ff6532..566ebedc917 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -808,7 +808,12 @@ bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) { // TODO: This should be extended to handle switches as well. BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator()); Constant *CondConst = dyn_cast<Constant>(CondCmp->getOperand(1)); - if (CondBr && CondConst && CondBr->isConditional()) { + if (CondBr && CondConst) { + // We should have returned as soon as we turn a conditional branch to + // unconditional. Because its no longer interesting as far as jump + // threading is concerned. + assert(CondBr->isConditional() && "Threading on unconditional terminator"); + LazyValueInfo::Tristate Ret = LVI->getPredicateAt(CondCmp->getPredicate(), CondCmp->getOperand(0), CondConst, CondBr); @@ -831,10 +836,12 @@ bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) { } return true; } - } - if (CondBr && CondConst && TryToUnfoldSelect(CondCmp, BB)) - return true; + // We did not manage to simplify this branch, try to see whether + // CondCmp depends on a known phi-select pattern. + if (TryToUnfoldSelect(CondCmp, BB)) + return true; + } } // Check for some cases that are worth simplifying. Right now we want to look |

