X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FPowerPC%2FPPCEarlyReturn.cpp;h=fc89753ed94e7e46be78b63f92e6610c022842ca;hb=17351cfb43e320129b854fff774cd81a6154fcb9;hp=08673cc093d5360e6eb9fcdb0f5e639e72280ce9;hpb=a5c1f106b1b6d3fd533b99990da94c602a3b5926;p=oota-llvm.git diff --git a/lib/Target/PowerPC/PPCEarlyReturn.cpp b/lib/Target/PowerPC/PPCEarlyReturn.cpp index 08673cc093d..fc89753ed94 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())