[LLVMdev] Purpose and usage of INITIALIZE_PASS_*

ryan stdstack at gmail.com
Mon Jan 28 10:26:09 PST 2013

Hi All,
Looking at the code of MemDepPrinter.cpp, I saw the

char MemDepPrinter::ID = 0;
> INITIALIZE_PASS_BEGIN(MemDepPrinter, "print-memdeps",
> "Print MemDeps of function", false, true)
> INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
> INITIALIZE_PASS_END(MemDepPrinter, "print-memdeps",
> "Print MemDeps of function", false, true)

What's the purpose of the INITIALIZE_PASS_* macros? What's the
difference between using static RegisterPass...?

When I try to use these macros in user-defined passes. The compiler complains,

error: ‘initializeXXXPass’ was not declared in this scope
> error: ‘void llvm::initializeXXXPass(llvm::PassRegistry&)’ should have
> been declared inside ‘llvm’

Is it because they should only be used by internal LLVM passes?

I couldn't find related hints from the documentation.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130128/9afd80e0/attachment.html>

More information about the llvm-dev mailing list