LLVM中注册Pass的两种方法

1. INITIALIZE_PASS(passName, arg, name, cfg, analysis)

参数说明:

  • passName:YourPassName;
  • arg:opt调用时所用的命行参数;
  • name:此pass的简要说明;
  • cfg:如果一个遍历CFG而不修改它,那么这个参数被设置为true;
  • analysis:如果一个Pass是一个分析Pass,例如dominator tree pass,那么这个参数被设置为true。

例子:

INITIALIZE_PASS(CallGraphPrinter, "dot-callgraph", "Print call graph to 'dot' file", false, false)
2. RegisterPass(const char *PassArg, const char *Name, bool CFGOnly = false, bool is_analysis = false)

上面这个是RegisterPass的构造函数。
参数说明:

  • template<typename passName>:YourPassName;
  • PassArg:opt调用时所用的命行参数;
  • Name:此pass的简要说明;
  • CFGOnly:如果一个遍历CFG而不修改它,那么这个参数被设置为true;
  • is_analysis:如果一个Pass是一个分析Pass,例如dominator tree pass,那么这个参数被设置为true。

例子:

static RegisterPass<Hello> X("hello", "Hello World Pass", false, false);

Hellopass nameXRegisterPass<Hello>的一个实例。

猜你喜欢

转载自blog.csdn.net/qq_23599965/article/details/88720651