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