编写LLVM X86 Machine Function Pass无输出,求排查及最新指南
LLVM MachineFunctionPass无输出问题排查及后端Pass编写求助
我尝试编写一个LLVM的MachineFunctionPass,目标是输出每条LLVM IR指令对应的汇编代码。
我参考过旧的邮件列表线程和第三方教程,但都没能成功运行——没有任何输出,而且部分教程里的头文件需要修改才能编译。
我先写了一个打印"hello"的测试Pass,代码如下(文件路径llvm/lib/Target/X86/X86EmitMap.cpp):
#include "llvm/Pass.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/Target/TargetIntrinsicInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" using namespace llvm; namespace llvm { FunctionPass *createX86EmitMap(); void initializeX86EmitMapPass(PassRegistry &); } // namespace llvm namespace { struct X86EmitMap : public MachineFunctionPass { static char ID; // Pass identification, replacement for typeid X86EmitMap() : MachineFunctionPass(ID) { initializeX86EmitMapPass(*PassRegistry::getPassRegistry()); } StringRef getPassName() const override { return "emit map pass"; } virtual bool runOnMachineFunction(MachineFunction &MF) override; }; } // namespace char X86EmitMap::ID = 0; INITIALIZE_PASS_BEGIN(X86EmitMap, "emit map", "emit map pass", false, false) INITIALIZE_PASS_END(X86EmitMap, "emit map", "emit map pass", false, false) FunctionPass *llvm::createX86EmitMap() { return new X86EmitMap(); } bool X86EmitMap::runOnMachineFunction(MachineFunction &MF) { errs() << "\n\nhello\n\n "; return false; }
我的操作流程如下:
- 创建上述文件并写入代码
- 在
void X86PassConfig::addPreEmitPass()中添加addPass(createX86EmitMap()); - 将
X86EmitMap.cpp添加到lib/Target/X86目录下的CMakeLists.txt - 在
X86.h中添加FunctionPass *createX86EmitMap();声明 - 编译并运行llc,预期会打印"hello"
但运行后没有任何输出,请问我哪里出错了?另外能否提供一份编写LLVM后端Pass的最新指南?我查阅了LLVM官方的后端编写文档和代码生成文档,也没找到解决方案。
内容的提问来源于stack exchange,提问作者Daniel Bohen
相关产品推荐
相关产品推荐

