Using another pass in a new pass
A pass may require another pass to get some analysis data, heuristics, or any such information to decide on a further course of action. The pass may just require some analysis such as memory dependencies, or it may require the altered IR as well. The new pass that you just saw simply prints the name of the function. Let's see how to enhance it to count the basic blocks in a loop, which also demonstrates how to use other pass results.
Getting ready
The code used in the previous recipe remains the same. Some modifications are required, however, to enhance it—as demonstrated in next section—so that it counts the number of basic blocks in the IR.
How to do it…
The getAnalysis
function is used to specify which other pass will be used:
Since the new pass will be counting the number of basic blocks, it requires loop information. This is specified using the
getAnalysis
loop function:LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
This will...