3

在一个非常简单的 LLVM IR 程序中,我可以做到

%MyStruct = type { i32 }
%MyInt = type i32

declare void @main(%MyStruct, %MyInt)

但是,我无法弄清楚如何使用 LLVM C++ API生成相同的%MyStruct = type { i32 }or语句。%MyInt = type i32在过去的几天里,我一直在搜索文档,我发现唯一接近我想要的就是手动定义一个新类型,如下所述:http: //llvm.org/docs/ExtendingLLVM.html #添加新类型

但是,我想要一种使用 LLVM C++ API 定义和使用新类型的方法,就像我可以使用函数等一样。

我能想到的唯一另一种方法是单独记录我的自定义类型和它们的 LLVM 原始基类型,并且在声明函数时,使用原始基类型;但如果 LLVM 本身内置了一种更快的方法,我不想开始这样做(正如我通过查看一些 LLVM IR 示例并生成上面的代码发现的那样)。

编辑:我做了更多的环顾四周,我发现一个函数的引用似乎正是我需要addTypeNamehttp://llvm.org/docs/ProgrammersManual.htmlhttp:// llvm.org/doxygen/Module_8h-source.html,但是这似乎是全部,因为我addTypeName在实际文档中看不到任何参考,并且我无法使用它编译程序,addTypeName因为它声称该方法不存在。

4

1 回答 1

4

对您来说最简单的方法是使用 cpp 后端 (llc -march=cpp) - 给定 IR,它将生成重现 IR 所需的 C++ API 调用序列。

于 2013-04-01T19:56:33.320 回答