-1

我读过这个页面, http: //llvm.org/docs/WritingAnLLVMPass.html

我可以完全做 Hello.so 的例子。

现在我只想制作一个可以由 opt 调用的.so文件,并将我的 IR 文件名作为输入参数读取。在我提交它之后,它会输出文件的名称。

之前试过好几种方法,还是不知道怎么弄。。。

我希望我能做到这样。

opt -load ../Debug+Asserts/lib/xxxx.so -flag < llvm.ll > /dev/null

当我按 ENTER 时,它将输出文件名 - >“llvm.ll”

任何人都可以帮我写这个简单的程序,我将优化llvm IR作为我的学期项目,现在我卡在这里...帮助我,谢谢~


你能详细告诉我代码吗,这对我不起作用

using namespace llvm;

namespace {
  struct Hello : public ModulePass {
    static char ID;
    Hello() : ModulePass(ID) {}

   virtual  bool runOnModule(Module &M) {
       dbgs() << M.getModuleIdentifier() << "\n";
      return false;
     }
  };
}

char Hello::ID = 0;
static RegisterPass<Hello> X("hello", "Hello World Pass", false, false);
~
4

1 回答 1

2

您的问题实际上可以简化为“如何从 LLVM 通行证中访问当前 .ll 文件的名称”。您不需要“解析 LLVM IR”或类似的东西 - 当运行 LLVM 通道时,它已经过了解析阶段。

无论如何,我不知道从 LLVM 模块获取文件名的任何可靠方法,但您可以在准备 .ll 文件时对该信息进行编码。例如,将模块 id 设置为文件名 via ; ModuleID = 'llvm.ll',然后通过编写模块传递并调用getModuleIdentifier来获取字符串来检索它。然后你可以打印出来,例如

bool runOnModule(Module& M) {
  dbgs() << M.getModuleIdentifier() << "\n";
  return false;
}

或者,使用元数据

于 2013-05-27T14:40:34.157 回答