【发布时间】:2016-03-31 01:37:03
【问题描述】:
我正在尝试生成可以重新生成输入其中的 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,这是在 OS X 上通过 brew 安装的。提前感谢您。
编辑:This question 已被指出为可能类似的问题。然而,这个问题是在 LLVM 3.2 的特定背景下提出的,因为我关注的是 3.6 版的当前情况,因为此时可能有一个真正的解决方案。该问题的唯一答案指向一般的外部资源,并没有非常彻底地解释实际解决方案是什么。
【问题讨论】:
-
c后端和cpp后端有很大不同;虽然前者已被删除,但后者仍受支持,只是默认情况下未构建。我认为这个问题与Generate LLVM C++ API code as backend 重复,应该解释如何构建 LLVM 以包含该后端。
-
@Oak 那么也许更好的问题是我如何启用 C++ 后端?该问题的答案似乎只是指向用于构建 LLVM 的通用页面,以及 IMO 不太清楚的上下文引用。同样正如我提到的,我通过自制软件安装了我的 LLVM 二进制文件,这是否暗示我在使用自制软件版本时无法启用 C++ 后端?
-
我猜你必须自己编译 LLVM 而不是使用现有的二进制文件,是的。很抱歉,我没有比该链接问题更详细的答案。
标签: compiler-construction llvm clang++ llvm-c++-api llc