Anom LLVM via llvm-dev
2018-Apr-19  20:57 UTC
[llvm-dev] Conditional analysis before inliner
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. 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. Thanks, Stan -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180419/9c081b19/attachment.html>
Friedman, Eli via llvm-dev
2018-Apr-20  17:55 UTC
[llvm-dev] Conditional analysis before inliner
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
Anom LLVM via llvm-dev
2018-Apr-23  22:37 UTC
[llvm-dev] Conditional analysis before inliner
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>
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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20180423/eb073e94/attachment.html>