From b7dfbb40a3fd9491c0188eca0ed2af66fa5ef44f Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Tue, 19 Apr 2016 17:19:14 +0000 Subject: [ValueTracking] Improve isImpliedCondition for conditions with matching operands. This patch improves SimplifyCFG to catch cases like: if (a < b) { if (a > b) <- known to be false unreachable; } Phabricator Revision: http://reviews.llvm.org/D18905 llvm-svn: 266767 --- llvm/lib/Transforms/Scalar/JumpThreading.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Transforms/Scalar/JumpThreading.cpp') diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index 2def0b5..d68dd14 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -928,9 +928,10 @@ bool JumpThreading::ProcessImpliedCondition(BasicBlock *BB) { if (!PBI || !PBI->isConditional() || PBI->getSuccessor(0) != CurrentBB) return false; - if (isImpliedCondition(PBI->getCondition(), Cond, DL)) { - BI->getSuccessor(1)->removePredecessor(BB); - BranchInst::Create(BI->getSuccessor(0), BI); + bool ImpliedTrue; + if (isImpliedCondition(PBI->getCondition(), Cond, ImpliedTrue, DL)) { + BI->getSuccessor(ImpliedTrue ? 1 : 0)->removePredecessor(BB); + BranchInst::Create(BI->getSuccessor(ImpliedTrue ? 0 : 1), BI); BI->eraseFromParent(); return true; } -- cgit v1.1