Identify Loops from within FunctionPass, or possible to intermix different types of Passes?

LLVMers,

I have a traversal plan which needs to visit certain types of Functions. For each instruction in such functions, I will need to know:

  1. is it located inside a loop
  2. if yes, what level of loop nest it is currently in.

So on the highest level, it should be a FunctionPass. However, in order to identify loops and loop-nest levels, it should also be a LoopPass.

Is there a reasonably simple way to identify loop(s) within a function under FunctionPass?

(Any existing LLVM code that I can take a look?)

OR

Is it possible to intermix different types of LLVM Passes?

E.g.

class MyPass: public FunctionPass, public LoopPass{

public:
bool runOnFunction(…);
bool runOnLoop(…);

};

Does this make any sense?
I haven’t seem to find any existing LLVM pass under such uses.

Thank you very much

Chuck

Your FunctionPass can use LoopInfo to get this information.

I’ve never seen a LoopPass, but doing a function pass and grab the loop info from “\llvm\Analysis\LoopInfo.h”.

From there just you use the LoopInfo api to grap the loop headers and loop blocks and whatever else you want to do.

  • Thank
    Jeff Kunkel