Fix Transforms/SimplifyCFG/2006-02-17-InfiniteUnroll.ll

llvm-svn: 26275
This commit is contained in:
Chris Lattner 2006-02-18 00:33:17 +00:00
parent 7e722ae07c
commit d9b0de3240

View File

@ -1426,8 +1426,8 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
PBI->setSuccessor(1, OldTrue);
}
if (PBI->getSuccessor(0) == TrueDest ||
PBI->getSuccessor(1) == FalseDest) {
if ((PBI->getSuccessor(0) == TrueDest && FalseDest != BB) ||
(PBI->getSuccessor(1) == FalseDest && TrueDest != BB)) {
// Clone Cond into the predecessor basic block, and or/and the
// two conditions together.
Instruction *New = Cond->clone();
@ -1512,6 +1512,12 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
PBIOp = BIOp = -1;
}
// Check to make sure that the other destination of this branch
// isn't BB itself. If so, this is an infinite loop that will
// 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);