[LLVMdev] LLVM Inliner
baldrick at free.fr
Mon Nov 29 08:40:05 PST 2010
> > 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
> > 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.
> So bottom up traversal of the (scc node of) callgraph is not sufficient to
> guarantee all callees are processed before the caller?
that's not the problem, the problem is that the pass manager schedules two
bottom up traversals, one for the inliner + cleanup passes and another for
the function attributes pass, if you place place the function attributes
pass later in the pass list. I don't know why, but it seems to be a pass
manager bug (perhaps it is a feature...).
More information about the llvm-dev