如何在当前版本中通过 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 中删除。
我正在尝试生成可以重新生成输入其中的 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 中删除。