summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2009-05-13 23:48:58 +0000
committerBob Wilson <bob.wilson@apple.com>2009-05-13 23:48:58 +0000
commit43f21dde1e5eba460301710bb56e6d1dc8499e61 (patch)
tree5a89cc102973a03e01fe2f0b234bf2a37d12e8f0
parent969bf71ca69c2807e40bfe43d55c1d450a7d93ae (diff)
downloadbcm5719-llvm-43f21dde1e5eba460301710bb56e6d1dc8499e61.tar.gz
bcm5719-llvm-43f21dde1e5eba460301710bb56e6d1dc8499e61.zip
Revert a portion of Dan's change r71018 that I'm convinced is wrong.
Dan was trying to catch the case where a basic block ends with a conditional branch to the fall-through block. In this case, all the instructions have been moved out of FromBBI, leaving it empty. It cannot end with a conditional branch. As the existing comment indicates, it will always fall through to the next block. If the block already had the next block (NBB) listed as a successor, the preceding loop has a check for that and does not remove it. Thus, we need to check and add the successor only when it is not already listed. With Dan's change, the empty block often ends up with the fall-through successor listed twice. This exposed the problem in pr4195, where CodePlacementOpt did not handle the same predecessor listed more than once. It is also at least partially responsible for pr4202 and probably a similar issue with Thumb branches being out of range. llvm-svn: 71742
-rw-r--r--llvm/lib/CodeGen/IfConversion.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/IfConversion.cpp b/llvm/lib/CodeGen/IfConversion.cpp
index 93e7ff6cfb6..1d0887f843d 100644
--- a/llvm/lib/CodeGen/IfConversion.cpp
+++ b/llvm/lib/CodeGen/IfConversion.cpp
@@ -1212,7 +1212,7 @@ void IfConverter::MergeBlocks(BBInfo &ToBBI, BBInfo &FromBBI) {
}
// Now FromBBI always falls through to the next block!
- if (NBB)
+ if (NBB && !FromBBI.BB->isSuccessor(NBB))
FromBBI.BB->addSuccessor(NBB);
std::copy(FromBBI.Predicate.begin(), FromBBI.Predicate.end(),
OpenPOWER on IntegriCloud