run -mem2reg and -reg2mem programmably from within a Pass

I am currently building a BasicBlock pass which requires to run -reg2mem before it, and need to run -mem2reg after it to clean up.

So, I want to specify -reg2mem as one of the pre-requisite passes to it, as:

class MyPass: public BasicBlockPass{

virtual void getAnalysisUsage(AnalysisUsage &AU){




I searched all passes under the lib/Transform directory, but didn’t find a single case of my expected usage.
Though I know opt takes both -reg2mem and -mem2reg as valid arguments and does the proper transformation, I didn’t figure out how it is being done.

What is the right way of doing this?
(Or, is there a different way doing it?)

Thank you very much


I guess AU.addRequiredID(DemoteRegisterToMemoryID) would do the trick.

- xi


Thank you for the comments.

I also found a recent comment (from John Criswell) on Transformation Pass as a pre requisite:

My problem is now solved :slight_smile: