One question about two passes interaction

Hi all,

I am trying to run a case as follows:

FunctionPass1: try to get all function’s names and store them to a global array
FunctionPass2: get information from the global array
In FunctionPass2, I use getAnalysisUsage() to set that to run FunctionPass2, FunctionPass1 should be executed first.

But according to the running result, I found that these two passes are executing at the same time,
which means After FunctionPass1 iterate one function, then FunctionPass2 will be executed to iterate one function; then FunctionPass1 continues to run, and then FunctionPass2…

While, what I expected is that the FunctionPass1 will complete first, then FunctionPass2 will be executed. Am I understanding wrong?


Hi Robert,

Function passes are expected to have local behavior that can be scheduled on a per-function basis in no particular order. To get the behavior you want, you probably want to make “FunctionPass1” a Module pass and have it iterate through all of the functions in the module.

You can find more information about passes and how to choose a type of pass in the llvm documentation at