[llvm] r368565 - [CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 12 07:13:33 PDT 2019


No problems!
I'm just saying it to hopefully improve future commits.

On Mon, Aug 12, 2019 at 5:11 PM Kang QI Zhang <shkzhang at cn.ibm.com> wrote:
>
> I am very sorry for this.
>
> I have reverted my latest commit.
>
> Thanks,
> Zhang Kang (张抗)
>
> XL/LLVM on Power Compiler Development, CDL Shanghai
> Email: shkzhang at cn.ibm.com                            Phone: 86-21-60928940
>
>
>
> ----- Original message -----
> From: Roman Lebedev <lebedev.ri at gmail.com>
> To: Kang Zhang <shkzhang at cn.ibm.com>
> Cc: llvm-commits at lists.llvm.org
> Subject: [EXTERNAL] Re: [llvm] r368565 - [CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks
> Date: Mon, Aug 12, 2019 9:18 PM
>
> This is being recommitted, but that isn't being said in the commit message,
> also this is being recommitted but no test is being added?
>
> On Mon, Aug 12, 2019 at 4:14 PM Kang Zhang via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> >
> > Author: zhangkang
> > Date: Mon Aug 12 06:15:31 2019
> > New Revision: 368565
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=368565&view=rev
> > Log:
> > [CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks
> >
> > Summary:
> >
> > In `block-placement` pass, it will create some patterns for unconditional we can do the simple early retrun.
> > But the `early-ret` pass is before `block-placement`, we don't want to run it again.
> > This patch is to do the simple early return to optimize the blocks at the last of `block-placement`.
> >
> > Reviewed By: efriedma
> >
> > Differential Revision: https://reviews.llvm.org/D63972
> >
> > Modified:
> >     llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
> >     llvm/trunk/test/CodeGen/PowerPC/block-placement.mir
> >
> > Modified: llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp?rev=368565&r1=368564&r2=368565&view=diff
> > ==============================================================================
> > --- llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp (original)
> > +++ llvm/trunk/lib/CodeGen/MachineBlockPlacement.cpp Mon Aug 12 06:15:31 2019
> > @@ -2755,6 +2755,7 @@ void MachineBlockPlacement::optimizeBran
> >    // cannot because all branches may not be analyzable.
> >    // E.g., the target may be able to remove an unconditional branch to
> >    // a fallthrough when it occurs after predicated terminators.
> > +  SmallVector<MachineBasicBlock*, 4> EmptyBB;
> >    for (MachineBasicBlock *ChainBB : FunctionChain) {
> >      Cond.clear();
> >      MachineBasicBlock *TBB = nullptr, *FBB = nullptr; // For AnalyzeBranch.
> > @@ -2774,9 +2775,42 @@ void MachineBlockPlacement::optimizeBran
> >          TII->removeBranch(*ChainBB);
> >          TII->insertBranch(*ChainBB, FBB, TBB, Cond, dl);
> >          ChainBB->updateTerminator();
> > +      } else if (Cond.empty() && TBB && ChainBB != TBB && !TBB->empty() &&
> > +                 !TBB->canFallThrough()) {
> > +        // When ChainBB is unconditional branch to the TBB, and TBB has no
> > +        // fallthrough predecessor and fallthrough successor, try to merge
> > +        // ChainBB and TBB. This is legal under the one of following conditions:
> > +        // 1. ChainBB is empty except for an unconditional branch.
> > +        // 2. TBB has only one predecessor.
> > +        MachineFunction::iterator I(TBB);
> > +        if (((TBB == &*F->begin()) || !std::prev(I)->canFallThrough()) &&
> > +             (TailDup.isSimpleBB(ChainBB) || (TBB->pred_size() == 1))) {
> > +          TII->removeBranch(*ChainBB);
> > +          ChainBB->removeSuccessor(TBB);
> > +
> > +          // Update the CFG.
> > +          while (!TBB->pred_empty()) {
> > +            MachineBasicBlock *Pred = *(TBB->pred_end()-1);
> > +            Pred->ReplaceUsesOfBlockWith(TBB, ChainBB);
> > +          }
> > +
> > +          for (MachineBasicBlock *Succ : TBB->successors())
> > +            ChainBB->addSuccessor(Succ, MBPI->getEdgeProbability(TBB, Succ));
> > +
> > +          // Move all the instructions of TBB to ChainBB.
> > +          ChainBB->splice(ChainBB->end(), TBB, TBB->begin(), TBB->end());
> > +          EmptyBB.push_back(TBB);
> > +        }
> >        }
> >      }
> >    }
> > +
> > +  for (auto BB: EmptyBB) {
> > +    MLI->removeBlock(BB);
> > +    FunctionChain.remove(BB);
> > +    BlockToChain.erase(BB);
> > +    F->erase(BB);
> > +  }
> >  }
> >
> >  void MachineBlockPlacement::alignBlocks() {
> > @@ -3096,6 +3130,9 @@ bool MachineBlockPlacement::runOnMachine
> >      }
> >    }
> >
> > +  // optimizeBranches() may change the blocks, but we haven't updated the
> > +  // post-dominator tree. Because the post-dominator tree won't be used after
> > +  // this function and this pass don't preserve the post-dominator tree.
> >    optimizeBranches();
> >    alignBlocks();
> >
> >
> > Modified: llvm/trunk/test/CodeGen/PowerPC/block-placement.mir
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/block-placement.mir?rev=368565&r1=368564&r2=368565&view=diff
> > ==============================================================================
> > --- llvm/trunk/test/CodeGen/PowerPC/block-placement.mir (original)
> > +++ llvm/trunk/test/CodeGen/PowerPC/block-placement.mir Mon Aug 12 06:15:31 2019
> > @@ -209,14 +209,10 @@ body:             |
> >      BLR8 implicit $lr8, implicit $rm, implicit killed $x3
> >
> >    ; CHECK:      bb.5.if.else.i:
> > -  ; CHECK:        successors: %bb.11(0x80000000)
> > -  ; CHECK:        B %bb.11
> > +  ; CHECK-NEXT:   renamable $x3 = LI8 1
> > +  ; CHECK-NEXT:   BLR8 implicit $lr8, implicit $rm, implicit killed $x3
> >
> >    ; CHECK:      bb.8.while.body.i (align 4):
> > -  ; CHECK:        successors: %bb.11(0x04000000), %bb.9(0x7c000000)
> > -  ; CHECK:        BCC 76, killed renamable $cr0, %bb.11
> > -
> > -  ; CHECK:      bb.11:
> > -  ; CHECK:        renamable $x3 = LI8 1
> > -  ; CHECK-NEXT:   BLR8 implicit $lr8, implicit $rm, implicit killed $x3
> > +  ; CHECK:        successors: %bb.5(0x04000000), %bb.9(0x7c000000)
> > +  ; CHECK:        BCC 76, killed renamable $cr0, %bb.5
> >  ...
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
>
>


More information about the llvm-commits mailing list