diff options
Diffstat (limited to 'lib/Target/PowerPC/PPCEarlyReturn.cpp')
-rw-r--r-- | lib/Target/PowerPC/PPCEarlyReturn.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/Target/PowerPC/PPCEarlyReturn.cpp b/lib/Target/PowerPC/PPCEarlyReturn.cpp index 08673cc093..fc89753ed9 100644 --- a/lib/Target/PowerPC/PPCEarlyReturn.cpp +++ b/lib/Target/PowerPC/PPCEarlyReturn.cpp @@ -151,12 +151,13 @@ protected: if (Changed && !ReturnMBB.hasAddressTaken()) { // We now might be able to merge this blr-only block into its // by-layout predecessor. - if (ReturnMBB.pred_size() == 1 && - (*ReturnMBB.pred_begin())->isLayoutSuccessor(&ReturnMBB)) { - // Move the blr into the preceding block. + if (ReturnMBB.pred_size() == 1) { MachineBasicBlock &PrevMBB = **ReturnMBB.pred_begin(); - PrevMBB.splice(PrevMBB.end(), &ReturnMBB, I); - PrevMBB.removeSuccessor(&ReturnMBB); + if (PrevMBB.isLayoutSuccessor(&ReturnMBB) && PrevMBB.canFallThrough()) { + // Move the blr into the preceding block. + PrevMBB.splice(PrevMBB.end(), &ReturnMBB, I); + PrevMBB.removeSuccessor(&ReturnMBB); + } } if (ReturnMBB.pred_empty()) |