集成 LLVM 通行证
Integrating LLVM passes
这可能是一个新手问题,但是有没有办法集成我的LLVM模块通行证,以便在转换阶段默认调用?
现在我正在使用这种语法来加载我的通行证并注册它
~/llvm/llvm/build/Debug+Asserts/bin/clang -Xclang -load -Xclang ~/llvm/llvm/build/Debug+Asserts/lib/SOMEPASSLIB.so
(问题是当我想用这个传递构建一些包时,编译器接受它,当我说,将加载部分作为 CFLAGS env 变量传递时,但有些制作文件也使用 CFLAGS 进行链接,并且链接器不知道它可以用这些信息做什么并且构建失败:\ )
您需要修改几个文件才能在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/中添加它,您还需要在分析中添加一行.cpp如下所示:
initializeFunctionInfoPass(Registry);
或者,如果您要将其添加为新的标量变换,则需要同时修改Scalar.h和标量.cpp同样。
相关文章:
- 如何将 I->getType() 作为参数传递给 llvm 中的 CreateCall?
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- llvm构建器向基本块添加终止符
- 正在LLVM中检测整数比较条件
- 如何在LLVM中dyn_cast以识别StoreInst?
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- 如何使用 llvm-10 库在C++定义 LLVM 全局值变量?
- 编译 llvm 3.1 时,为什么会出现错误:在">"标记之前预期主表达式
- 如何删除 LLVM 中的不规则分支?
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 从macOS Catalina上的源代码编译LLVM(如何解决未找到"stdio.h")
- LLVM 选择找不到函数传递
- LLVM 通行证:破坏库未与传递库链接
- 如何将 Haskell LLVM 通行证与 C++ LLVM 通行证(如果有的话)集成
- 如何将调试信息附加到LLVM通行证中的指令中
- LLVM 3.8:使用AD IDE(XCODE)实现通行证
- 集成 LLVM 通行证