Changes in directory llvm/lib/Transforms/Utils:
SimplifyCFG.cpp updated: 1.97 -> 1.98 --- Log message: Fix an infinite loop on Transforms/SimplifyCFG/2006-06-12-InfLoop.ll --- Diffs of the changes: (+10 -1) SimplifyCFG.cpp | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) Index: llvm/lib/Transforms/Utils/SimplifyCFG.cpp diff -u llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.97 llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.98 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.97 Sun May 14 13:45:44 2006 +++ llvm/lib/Transforms/Utils/SimplifyCFG.cpp Mon Jun 12 15:18:01 2006 @@ -1515,12 +1515,21 @@ // keep getting unwound. if (PBIOp != -1 && PBI->getSuccessor(PBIOp) == BB) PBIOp = BIOp = -1; - + // Finally, if everything is ok, fold the branches to logical ops. if (PBIOp != -1) { BasicBlock *CommonDest = PBI->getSuccessor(PBIOp); BasicBlock *OtherDest = BI->getSuccessor(BIOp ^ 1); + // If OtherDest *is* BB, then this is a basic block with just + // a conditional branch in it, where one edge (OtherDesg) goes + // back to the block. We know that the program doesn't get + // stuck in the infinite loop, so the condition must be such + // that OtherDest isn't branched through. Forward to CommonDest, + // and avoid an infinite loop at optimizer time. + if (OtherDest == BB) + OtherDest = CommonDest; + DEBUG(std::cerr << "FOLDING BRs:" << *PBI->getParent() << "AND: " << *BI->getParent()); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits