您需要修改几个文件才能在 LLVM 核心中定义您的通行证:
i) 在您的通行证内:可加载通行证是这样注册的(假设您的通行证名称是 FunctionInfo):
char FunctionInfo::ID = 0;
RegisterPass<FunctionInfo> X("function-info", "Functions Information");
你需要把它改成这样:
char FunctionInfo::ID = 0;
INITIALIZE_PASS_BEGIN(FunctionInfo, "function-info", "Gathering Function info", false, false)
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
.... // initialize all passes which your pass needs
INITIALIZE_PASS_END(FunctionInfo, "function-info", "gathering function info", false, false)
ModulePass *llvm::createFunctionInfoPass() { return new FunctionInfo(); }
ii) 您还需要在 llvm 中注册您的通行证,至少在 InitializePasses.h 和 LinkAllPasses.h 中。
在 LinkAllPasses.h 你应该添加:
(void)llvm::createFunctionInfoPass();
并在 InitializePasses.h 中添加:
void initializeFunctionInfoPass(PassRegistry &);
iii) 除了这些修改之外,您可能需要更改另一个文件,具体取决于您要添加通行证的位置。例如,如果您要将它添加到 lib/Analysis/ 中,您还需要在 Analysis.cpp 中添加一行,如下所示:
initializeFunctionInfoPass(Registry);
或者如果您要将其添加为新的Scalar Transform,您需要同样修改 Scalar.h 和 Scalar.cpp。