[LLVMdev] LLVM Inliner

Chris Lattner clattner at apple.com
Mon Nov 29 17:15:29 PST 2010


On Nov 29, 2010, at 5:01 PM, Devang Patel wrote:

> 
> On Nov 29, 2010, at 1:17 AM, Duncan Sands wrote:
> 
>> Hi David,
>> 
>>> Interesting -- LLVM does perform on the fly cleanups during inlining
>>> transformation -- this will make summary update precise. One thing I notice from
>>> the debug pass dump is that the 'deduce function attribute' pass happens before
>>> the clean up -- Is it intended?
>> 
>> you are correct.  This is due to a limitation of the pass manager: it would
>> clearly be better to run the function attributes pass after the per-function
>> passes that follow the inliner, but currently if you try what happens is that
>> first the inliner and on the fly cleanups get run on every function, and only
>> when they have finished the function attributes pass gets run on every
>> function.  That means that function attributes of callees will not have been
>> calculated when the inliner (and the subsequent function passes) process a
>> function, which is bad.  I think the pass manager should be fixed to not do
>> this, at which point the function attributes pass could be moved later.
> 
> I am not sure I understand this. Here is what I am seeing when I run
> 'opt -inline -instcombine -functionattrs'
> 
> Target Data Layout
> No Alias Analysis (always returns 'may' alias)
>  ModulePass Manager
>    Basic CallGraph Construction
>    Call Graph SCC Pass Manager
>      Function Integration/Inlining
>      FunctionPass Manager
>        Combine redundant instructions
>    Basic CallGraph Construction
>    Call Graph SCC Pass Manager
>      Deduce function attributes
>      FunctionPass Manager
>        Preliminary module verification
>        Dominator Tree Construction
>        Module Verifier
> 
> 
> Is this not what you expect ?

I'd expect (ignoring the verifier):

Target Data Layout
No Alias Analysis (always returns 'may' alias)
 ModulePass Manager
   Basic CallGraph Construction
   Call Graph SCC Pass Manager
     Function Integration/Inlining
     FunctionPass Manager
       Combine redundant instructions
     Deduce function attributes

-Chris



More information about the llvm-dev mailing list