[LLVMdev] llvm passes
sabre at nondot.org
Mon Sep 25 00:00:34 PDT 2006
On Fri, 22 Sep 2006, Ryan M. Lefever wrote:
> In the instructions for writing LLVM passes, it says "[c]urrently it is
> illegal for a ModulePass to require a FunctionPass. This is because
> there is only one instance of the FunctionPass object ever created, thus
> nowhere to store information for all of the functions in the program at
> the same time."
> I'm a little confused by that. It was my understanding that if pass X
> required pass Y, then pass Y would have to fully run and build up its
> internal data structures before pass X ran. Then, when pass X was run,
> X would call getAnalysis<Y> and get a reference to the pass Y object,
> which it could query for information stored during pass Y's execution.
> So, I'm wondering why the types of the passes matter. The statement
> that there would be "nowhere to store information for all of the
> functions in the program," confuses me.
Imagine you have a functionpass X, for example DominatorSet. DominatorSet
runs on a function at a time and captures information about the current
function's dominator information in its instance variables.
Now you have ModulePass Y that runs and requires X to be run. Because it
is a functionpass, X will be run on every function in the module before Y
starts. Further, because X only has one set of instance variables, Y
could see, at most, information for one function.
More information about the llvm-dev