Question about using multiple functions in a Function pass

Hi all,

I would want to know if from the runOnFunction method of a Function pass, other functions in IR, except for the one received as parameter, can be obtained as well, from a call instruction, as follows:

Function F = dyn_cast(callInst);

Or do I need a Module pass to work in IR with multiple functions from input source code? If so, it is accepted to have O(n^3) complexity in a module pass when iterating through each instruction of each basic block of each function in the module.

Unrelated to the topic, I would also like to ask if a module object contains the IR for the entire application if the application contains multiple source files?

Kind regards,

Iulia ȘTIRB

Forgot one question to the mail and a correction below:

When calling runOnFunction for a function in IR is it guaranteed that all other functions in the module are already parsed by the compiler?

Thank you,
Iulia

Hi Iulia,

Function passes are not allowed to process functions other than the current one. Please see http://llvm.org/docs/WritingAnLLVMPass.html#the-functionpass-class

Alex

My understanding is that a pass type is supposed not to operate
outside its scope (module, function, loop, etc.) because the pass
manager might choose to 'batch' multiple passes of the same type (for
performance) or could run concurrently. It sounds like it's best to
use a module pass if the other functions in the same module need to be
read.