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

时间:2016-03-31 01:37:03

标签: compiler-construction llvm clang++ llvm-c++-api llc

我正在尝试生成可以重新生成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中the same issue occurred。然而,我使用cpp,这使我相信由于某种原因,在我的llvm版本中不存在cpp后端。

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

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

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

2 个答案:

答案 0 :(得分:0)

启用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

答案 1 :(得分:0)

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