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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26275 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-02-18 00:33:17 +00:00
parent 6a9f57c7ef
commit 299520de7c

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);