0

我正在尝试生成可以重新生成输入其中的 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'。进一步的研究告诉我,当在 3.1 版中删除 c 后端时,在 LLVM 的早期版本中也发生了同样的问题。然而,我正在使用 cpp,这让我相信由于某种原因,我的 llvm 版本中不存在 cpp 后端。

所以我真的想从这里知道的是:如果我到目前为止的分析是正确的,我如何启用 cpp 后端或以其他方式让我的有限责任公司达到我可以以我想要的方式使用它的状态?当然,如果我错了或有其他方法,我会对此持开放态度。

我们选择使用的版本是 LLVM 3.6,这是通过 brew 在 OS X 上安装的。提前谢谢你。

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

4

2 回答 2

1

似乎启用 cpp 后端的正确方法是下载 LLVM 源并自己构建它,这是该过程对我的工作方式:

  • 转到此页面并找到您想要使用的版本,下载标题为“LLVM 源代码”的相应链接
  • 提取文件
  • 打开命令行
  • cd到你刚刚解压的文件夹,它的格式应该是“llvm-xxxsrc”,其中xxx是你的版本号
  • mkdir build
  • cd build
  • brew install cmake(如果你还没有 cmake)
  • cmake -G Xcode ..(这会生成一个可以构建 LLVM 的 Xcode 项目)
  • open LLVM.xcodeproj
  • 如果 Xcode 打开时出现提示,请单击“自动创建方案”
  • 等待 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
于 2016-04-02T17:17:21.523 回答
0

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

于 2017-03-19T14:51:27.777 回答