[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