【问题标题】:How to generate LLVM api code via IR code, in current versions?在当前版本中,如何通过 IR 代码生成 LLVM api 代码?
【发布时间】: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


【解决方案1】:

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

  • Go to this page 并找到您想要使用的版本,下载标题为“LLVM 源代码”的相应链接
  • 解压文件
  • 打开命令行
  • 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打开时出现提示,点击“自动创建方案”
  • 等待 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这个问题来自 2016 年 5 月之前,并且确实提到了问题中使用的 LLVM 版本。我认为这作为评论可能会更好?
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多