如何在当前版本中通过 IR 代码生成 LLVM api 代码?

How to generate LLVM api code via IR code, in current versions?

我正在尝试生成可以重新生成输入其中的 IR 代码的 LLVM API 代码。正如我通过 this question 等各种问题发现的那样,在某些时候可以执行以下操作来实现此目标:

clang++ -S -O0 -emit-llvm MyFile.cpp -o MyIR.ll
llc -march=cpp MyIR.ll -o MyIR_Maker.cpp

但是我收到以下错误: llc:错误:无效目标 'cpp'。 进一步的研究告诉我,the same issue occurred 在早期版本的 LLVM 中,当 c 后端在版本 3.1 中被删除时。然而,我正在使用 cpp,这让我相信由于某种原因,我的 llvm 版本中不存在 cpp 后端。

所以我真的想从这里知道的是:如果到目前为止我的分析是正确的,我如何启用 cpp 后端或以其他方式让我的 llc 达到我可以按照我想要的方式使用它的状态?当然,如果我错了或者有其他方法,我会接受的。

我们选择使用的版本是 LLVM 3.6,它是通过 brew 在 OS X 上安装的。在此先感谢您。

编辑:This question 已被指出可能是一个类似的问题。然而,这个问题是在 LLVM 3.2 的特定上下文中提出的,我的问题是 3.6 版的当前情况,因为此时可能有一个真正的解决方案。该问题的唯一答案指向一般的外部资源,并没有非常彻底地解释实际解决方案是什么。

启用 cpp 后端的正确方法似乎是下载 LLVM 源代码并自行构建它,以下是我的工作流程:

  • Go to this page 并找到您要使用的版本,下载标题为 "LLVM source code"
  • 的相应 link
  • 提取文件
  • 打开命令行
  • cd到你刚刚解压的文件夹,格式应该是"llvm-x.x.x.src",其中x.x.x是你的版本号
  • mkdir build
  • cd build
  • brew install cmake(如果您还没有 cmake)
  • cmake -G Xcode ..(这会生成一个可以构建 LLVM 的 Xcode 项目)
  • open LLVM.xcodeproj
  • 如果 Xcode 打开时出现提示,请单击 "automatically create schemes"
  • 等待 Xcode 完成索引,这需要一段时间。
  • 运行 Xcode项目编译LLVM,这也需要一段时间。
  • 完成此操作后,所有生成的 llvm CLI 工具都将位于您的 "build" 文件夹中的一个名为 Debug/bin
  • 的目录中
  • 将此文件夹放在任何您想要的位置,然后将其导出到您的路径。

假设您使用的是适当版本的 clang,并且您的路径不包含一组不同的 llvm 二进制文件,现在您应该能够按照预期工作:

clang++ -S -O0 -emit-llvm MyFile.cpp -o MyIR.ll
llc -march=cpp MyIR.ll -o MyIR_Maker.cpp

Generate LLVM C++ API code as backend 中所述,此功能 (-march=cpp) 似乎已于 2016 年 5 月左右从 LLVM 中删除。