diff options
author | Dale Johannesen <dalej@apple.com> | 2007-05-24 17:39:32 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2007-05-24 17:39:32 +0000 |
commit | de0963df420f408b2d813bd16f3c040c2d189f63 (patch) | |
tree | d342bd971c186cd93c58e0967e47fed8379b14cd /lib/CodeGen/BranchFolding.cpp | |
parent | 849c5b45379af00348ecf785e52fedeab83995a2 (diff) |
Fix for PR1444: do not create two successors to the same block.
Temporarily, this breaks CodeGen/Generic/2006-02-12-InsertLibraryCall.ll
by exposing an unrelated latent problem; working on that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37323 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/BranchFolding.cpp')
-rw-r--r-- | lib/CodeGen/BranchFolding.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index afaaf51952..6c632c2aee 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -717,12 +717,20 @@ static void ReplaceUsesOfBlockWith(MachineBasicBlock *BB, I->getOperand(i).setMachineBasicBlock(New); } - // Update the successor information. + // Update the successor information. If New was already a successor, just + // remove the link to Old instead of creating another one. PR 1444. + bool HadSuccessorNew = false; std::vector<MachineBasicBlock*> Succs(BB->succ_begin(), BB->succ_end()); for (int i = Succs.size()-1; i >= 0; --i) + if (Succs[i] == New) { + HadSuccessorNew = true; + break; + } + for (int i = Succs.size()-1; i >= 0; --i) if (Succs[i] == Old) { BB->removeSuccessor(Old); - BB->addSuccessor(New); + if (!HadSuccessorNew) + BB->addSuccessor(New); } } |