diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 9ca1079ab313..12960c946452 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1905,10 +1905,16 @@ static bool SimplifyBranchOnICmpChain(BranchInst *BI, const TargetData *TD) { BasicBlock *BB = BI->getParent(); + DEBUG(dbgs() << "CONVERTING 'icmp' CHAIN with " << Values.size() + << " cases into SWITCH. BB is:\n" << *BB); + // If there are any extra values that couldn't be folded into the switch // then we evaluate them with an explicit branch first. Split the block // right before the condbr to handle it. if (ExtraCase) { + DEBUG(dbgs() << " ** 'icmp' chain unhandled condition: " << *ExtraCase + << '\n'); + BasicBlock *NewBB = BB->splitBasicBlock(BI, "switch.early.test"); // Remove the uncond branch added to the old block. TerminatorInst *OldTI = BB->getTerminator(); @@ -2361,7 +2367,7 @@ bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI) { // branches to us and one of our successors, fold the setcc into the // predecessor and use logical operations to pick the right destination. if (FoldBranchToCommonDest(BI)) - return SimplifyCFG(BB) | true; + return true; // Scan predecessor blocks for conditional branches. for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) @@ -2413,8 +2419,7 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) { if (BI->isUnconditional()) { if (SimplifyUncondBranch(BI)) return true; } else { - if (SimplifyCondBranch(BI)) - return true; + if (SimplifyCondBranch(BI)) return true; } } else if (ReturnInst *RI = dyn_cast(BB->getTerminator())) { if (SimplifyReturn(RI)) return true;