1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

Fix an infinite loop on Transforms/SimplifyCFG/2006-06-12-InfLoop.ll

llvm-svn: 28758
This commit is contained in:
Chris Lattner 2006-06-12 20:18:01 +00:00
parent 8e718346df
commit 649af38df3

View File

@ -1515,12 +1515,21 @@ bool llvm::SimplifyCFG(BasicBlock *BB) {
// 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());