diff options
| author | Hiroshi Inoue <inouehrs@jp.ibm.com> | 2017-09-27 10:33:02 +0000 | 
|---|---|---|
| committer | Hiroshi Inoue <inouehrs@jp.ibm.com> | 2017-09-27 10:33:02 +0000 | 
| commit | ed1ffa49a4eceb35b7463839931f03743c6194d9 (patch) | |
| tree | a0d2cbdb25ec1f58a56709c26e9b223a34941de8 /llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | |
| parent | 1a77bcc0d2317b97b19f6386b1d40ab864e2a26e (diff) | |
| download | bcm5719-llvm-ed1ffa49a4eceb35b7463839931f03743c6194d9.tar.gz bcm5719-llvm-ed1ffa49a4eceb35b7463839931f03743c6194d9.zip | |
[PowerPC] eliminate unconditional branch to the next instruction
This patch makes analyzeBranch eliminate unconditional branch to the next instruction.
After basic blocks are re-organized by optimizers, such as machine block placement, a BB may end with an unconditional branch to the next (fallthrough) BB. This patch removes such redundant branch instruction.
Differential Revision: https://reviews.llvm.org/D37730
llvm-svn: 314297
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCInstrInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp index 80530ec19be..1e4cc4a3c80 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -494,6 +494,20 @@ bool PPCInstrInfo::analyzeBranch(MachineBasicBlock &MBB,    if (!isUnpredicatedTerminator(*I))      return false; +  if (AllowModify) { +    // If the BB ends with an unconditional branch to the fallthrough BB, +    // we eliminate the branch instruction. +    if (I->getOpcode() == PPC::B && +        MBB.isLayoutSuccessor(I->getOperand(0).getMBB())) { +      I->eraseFromParent(); + +      // We update iterator after deleting the last branch. +      I = MBB.getLastNonDebugInstr(); +      if (I == MBB.end() || !isUnpredicatedTerminator(*I)) +        return false; +    } +  } +    // Get the last instruction in the block.    MachineInstr &LastInst = *I; | 

