[llvm] r179026 - Generate PPC early conditional returns

Hal Finkel hfinkel at anl.gov
Tue Apr 9 08:57:49 PDT 2013


----- Original Message -----
> From: "Evan Cheng" <evan.cheng at apple.com>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: "Chris Lattner" <clattner at apple.com>, llvm-commits at cs.uiuc.edu
> Sent: Tuesday, April 9, 2013 10:53:28 AM
> Subject: Re: [llvm] r179026 - Generate PPC early conditional returns
> 
> 
> 
> Sent from my iPad
> 
> On Apr 8, 2013, at 10:09 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> 
> > ----- Original Message -----
> >> From: "Chris Lattner" <clattner at apple.com>
> >> To: "Hal Finkel" <hfinkel at anl.gov>
> >> Cc: llvm-commits at cs.uiuc.edu
> >> Sent: Monday, April 8, 2013 8:04:17 PM
> >> Subject: Re: [llvm] r179026 - Generate PPC early conditional
> >> returns
> >> 
> >> 
> >> On Apr 8, 2013, at 9:24 AM, Hal Finkel <hfinkel at anl.gov> wrote:
> >> 
> >>> Author: hfinkel
> >>> Date: Mon Apr  8 11:24:03 2013
> >>> New Revision: 179026
> >>> 
> >>> URL: http://llvm.org/viewvc/llvm-project?rev=179026&view=rev
> >>> Log:
> >>> Generate PPC early conditional returns
> >>> 
> >>> PowerPC has a conditional branch to the link register (return)
> >>> instruction: BCLR.
> >>> This should be used any time when we'd otherwise have a
> >>> conditional
> >>> branch to a
> >>> return. This adds a small pass, PPCEarlyReturn, which runs just
> >>> prior to the
> >>> branch selection pass (and, importantly, after block placement)
> >>> to
> >>> generate
> >>> these conditional returns when possible. It will also eliminate
> >>> unconditional
> >>> branches to returns (these happen rarely; most of the time these
> >>> have already
> >>> been tail duplicated by the time PPCEarlyReturn is invoked). This
> >>> is a nice
> >>> optimization for small functions that do not maintain a stack
> >>> frame.
> >> 
> >> Hi Hal,
> >> 
> >> Should this just be a special case of general predication/if
> >> conversion?
> > 
> > It seems like it should be, but I'm not sure. The regular if
> > conversion pass is generally added in addPreSched2, which is after
> > epilogue generation, and so it could work. When I looked through
> > the source to IfConversion.cpp, it did not seem like it would have
> > supported this transformation. IfConversion seems to be looking
> > for blocks to predicate in between the conditional branch and the
> > common successor, and not specifically concerned with tail merging
> > a predicated common successor into the common predecessor;
> > something which may only make sense if the common sucessor is a
> > return). This may really be more of a peephole-style optimization
> > than a predication optimization. Evan?
> > 
> 
> It may require some work to get it right for this case but the if
> converter does generate conditional returns.

Okay, cool. I'll try it out.

Thanks again,
Hal

> 
> Evan
> 
> > -Hal
> > 
> >> 
> >> -Chris
> >> 
> 



More information about the llvm-commits mailing list