[llvm-dev] Conditional analysis before inliner

Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 23 16:02:45 PDT 2018


I probably wouldn't worry about the cost of LoopInfo; it's relatively 
cheap to compute.  But if you're really concerned, you can run your pass 
after a pass which preserves LoopInfo (so it's free because it was 
already computed).  Or you can stick your code into an existing pass 
which requires LoopInfo anyway, like LoopIdiomRecognize.

-Eli

On 4/23/2018 3:37 PM, Anom LLVM wrote:
> Thanks for the answer Eli.
>
> I think I was a little too vague in my question. The program has the 
> following structure:
> void foo() {
>   bar();
> }
>
> void bar() {
>   for (..) {
>        __builtin_compute()
>   }
> }
>
> We would like to use scalar evolution + loopinfowrapperpass inside 
> instcombine only if __builtin_compute is present. instcombine can 
> convert the loop into a single builtin ie.
>
> void bar() {
>   __builtin_wide_compute();
> }
>
> When the inliner runs on foo(), we want bar() to already have the 
> transformation to reflect the cost of the inlining decision more 
> accurately.
>
> I do see that scalar evolution is a lazy but loopwrapinfopass is not. 
> Is there a way to run these two analysis passes conditionally before 
> inlining?
>
> Thanks,
>
> Stan
>
>
>
>
>
>
> On Fri, Apr 20, 2018 at 1:55 PM, Friedman, Eli 
> <efriedma at codeaurora.org <mailto:efriedma at codeaurora.org>> wrote:
>
>     On 4/19/2018 1:57 PM, Anom LLVM via llvm-dev wrote:
>
>         Hi,
>
>         I have pass phase ordering question.
>
>         I am interested in performing a transformation that matches
>         several LLVM IR instructions and converts them to a single
>         builtin. This sort of transformation must occur prior to
>         inlining because inlining needs to analyze cost of the
>         builtin. However, the LLVM IR -> builtin transformation
>         requires scalar evolution which typically doesn't run until
>         after the inliner.
>
>
>     This isn't right, or at least, not the complete picture; loop
>     optimization passes run interleaved with the inliner. (Try looking
>     at the output of "-debug-pass=Executions" to see exactly what's
>     happening.)
>
>         My question is, is there a way to run scalar evolution
>         conditionally prior to inlining? I'd like to leave compile
>         time unaffected if my code doesn't contain any of these builtins.
>
>
>     ScalarEvolution is lazy, so it's essentially free if you don't
>     query it.
>
>     -Eli
>
>     -- 
>     Employee of Qualcomm Innovation Center, Inc.
>     Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
>     a Linux Foundation Collaborative Project
>
>

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180423/5f85a4a8/attachment.html>


More information about the llvm-dev mailing list