[LLVMdev] LLVM Inliner

Devang Patel dpatel at apple.com
Mon Nov 29 17:28:47 PST 2010


On Nov 29, 2010, at 5:15 PM, Chris Lattner wrote:

> 
> 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
> 

Right now PassManager is not doing this because instcombine does not state that it preserves Inlining and Basic CallGraph Construction.

-
Devang





More information about the llvm-dev mailing list