diff options
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index bbeb28d9772..f4d02573cdc 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -521,8 +521,16 @@ static bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI) {        SwitchInst *NewSI = new SwitchInst(CV, PredDefault, PTI);        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)          NewSI->addCase(PredCases[i].first, PredCases[i].second); + +      Instruction *DeadCond = 0; +      if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) +        // If PTI is a branch, remember the condition. +        DeadCond = dyn_cast<Instruction>(BI->getCondition());        Pred->getInstList().erase(PTI); +      // If the condition is dead now, remove the instruction tree. +      if (DeadCond) ErasePossiblyDeadInstructionTree(DeadCond); +        // Okay, last check.  If BB is still a successor of PSI, then we must        // have an infinite loop case.  If so, add an infinitely looping block        // to handle the case to preserve the behavior of the code. | 

