Manually remove successors in if conversion when CopyAndPredicateBlock is used
authorHal Finkel <hfinkel@anl.gov>
Wed, 10 Apr 2013 22:05:25 +0000 (22:05 +0000)
committerHal Finkel <hfinkel@anl.gov>
Wed, 10 Apr 2013 22:05:25 +0000 (22:05 +0000)
commit9af7014019c971368d541870b108aef1f12a24ba
treeee3ba7278d270093bd1fe0e2a49fe5ed145671e0
parent3c08eef20b9cfc31d4ae3a43f1c9a57a4ab2cad7
Manually remove successors in if conversion when CopyAndPredicateBlock is used

In the simple and triangle if-conversion cases, when CopyAndPredicateBlock is
used because the to-be-predicated block has other predecessors, we need to
explicitly remove the old copied block from the successors list. Normally if
conversion relies on TII->AnalyzeBranch combined with BB->CorrectExtraCFGEdges
to cleanup the successors list, but if the predicated block contained an
un-analyzable branch (such as a now-predicated return), then this will fail.

These extra successors were causing a problem on PPC because it was causing
later passes (such as PPCEarlyReturm) to leave dead return-only basic blocks in
the code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179227 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/IfConversion.cpp
test/CodeGen/PowerPC/bdzlr.ll
test/CodeGen/PowerPC/early-ret2.ll