<div dir="ltr">Okay. Done.  :)<div><br></div><div>-bw</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 21, 2013 at 2:58 PM, Hal Finkel <span dir="ltr"><<a href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Bill,<br>
<br>
Please pull this bug fix into the release branch.<br>
<br>
Thanks again,<br>
Hal<br>
<br>
----- Original Message -----<br>
> Author: hfinkel<br>
> Date: Tue May 21 09:21:09 2013<br>
> New Revision: 182385<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=182385&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=182385&view=rev</a><br>
> Log:<br>
> Fix PPC branch selection for counter-based branches<br>
><br>
> Although I had added some support for the BDZ/BDNZ branches into the<br>
> selector<br>
> (in r158204), I had not correctly adjusted the condition at the top<br>
> of the<br>
> loop. As a result, these branches were still essentially unsupported.<br>
><br>
> This fixes PR16086. Unfortunately, any test case would be very large<br>
> (because<br>
> it would need to force the loop backedge to exceed the range of the<br>
> 16-bit<br>
> immediate).<br>
><br>
> Modified:<br>
>     llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp<br>
><br>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp<br>
> URL:<br>
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp?rev=182385&r1=182384&r2=182385&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp?rev=182385&r1=182384&r2=182385&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp (original)<br>
> +++ llvm/trunk/lib/Target/PowerPC/PPCBranchSelector.cpp Tue May 21<br>
> 09:21:09 2013<br>
> @@ -112,15 +112,21 @@ bool PPCBSel::runOnMachineFunction(Machi<br>
>        unsigned MBBStartOffset = 0;<br>
>        for (MachineBasicBlock::iterator I = MBB.begin(), E =<br>
>        MBB.end();<br>
>             I != E; ++I) {<br>
> -        if (I->getOpcode() != PPC::BCC || I->getOperand(2).isImm())<br>
> {<br>
> +        MachineBasicBlock *Dest = 0;<br>
> +        if (I->getOpcode() == PPC::BCC && !I->getOperand(2).isImm())<br>
> +          Dest = I->getOperand(2).getMBB();<br>
> +        else if ((I->getOpcode() == PPC::BDNZ8 || I->getOpcode() ==<br>
> PPC::BDNZ ||<br>
> +                  I->getOpcode() == PPC::BDZ8  || I->getOpcode() ==<br>
> PPC::BDZ) &&<br>
> +                 !I->getOperand(0).isImm())<br>
> +          Dest = I->getOperand(0).getMBB();<br>
> +<br>
> +        if (!Dest) {<br>
>            MBBStartOffset += TII->GetInstSizeInBytes(I);<br>
>            continue;<br>
>          }<br>
><br>
>          // Determine the offset from the current branch to the<br>
>          destination<br>
>          // block.<br>
> -        MachineBasicBlock *Dest = I->getOperand(2).getMBB();<br>
> -<br>
>          int BranchSize;<br>
>          if (Dest->getNumber() <= MBB.getNumber()) {<br>
>            // If this is a backwards branch, the delta is the offset<br>
>            from the<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
><br>
</blockquote></div><br></div>