[LLVMdev] LoopPass doFinalization() called multiple times per program?
chandlerc at google.com
Mon Dec 17 04:47:25 PST 2012
On Sun, Dec 16, 2012 at 7:23 AM, Duncan Sands <baldrick at free.fr> wrote:
> Hi Stephen,
> On 13/12/12 18:58, Stephen McGruer wrote:
>> I'm wondering if the documentation for LoopPass
>> is misleading or
>> incorrect (or if I'm just missing something.) The documentation states:
>> "The doFinalization method ... is called when the pass framework has
>> calling runOnLoop <http://llvm.org/docs/**WritingAnLLVMPass.html#**
>> runOnLoop <http://llvm.org/docs/WritingAnLLVMPass.html#runOnLoop>> for
>> every loop in the program being compiled."
>> From this, I understood that for a single instance of a LoopPass
>> sub-class, the
>> doFinalization method would be called exactly once, after all loops had
>> seen. However in practice I am seeing doFinalization() being called
>> times per program. Digging into the code, it appears that LPPassManager
>> makes the calls to doFinalization() at the end of it's runOnFunction()
>> at time of
>> writing). This therefore means that doFinalization() can be called
>> times per LoopPass; as many as there are functions defined in the input
> my understanding is that this is the expected behaviour and the
> should be improved (want to propose a patch?).
I'm actually really hoping to change this behavior in the not-too-distant
The goal that I and several others have worked out is that for *all*
passes, the doInitialization and doFinalization are called once per module.
All of the doInitialization methods should be called before the first
pass's runOn*** method is called, and all of the doFinalization calls
should be after the last pass's runOn*** have finished.
The goal of the initialization and finalization methods is to allow
per-module caching, uniquing, setup, and teardown.
I know that we are quite far from this goal in practice sadly, but I think
the goal remains the same.
> Ciao, Duncan.
>> Assuming I have made no mistakes here, is this a case of poorly written
>> documentation, or an error in the implementation? I note that
>> FPPassManager does
>> it calls to FunctionPass' doFinalization() in it's own doFinalization()
>> which seems the correct behaviour to me.
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev