在一个非常简单的LLVM IR程序中,我可以做到
%MyStruct = type { i32 }
%MyInt = type i32
declare void @main(%MyStruct, %MyInt)
但是,我无法弄清楚如何使用LLVM C ++ API生成相同的%MyStruct = type { i32 }
或%MyInt = type i32
语句。过去几天我一直在搜索文档,我发现的唯一接近我想要的是手动定义这里提到的新类型:http://llvm.org/docs/ExtendingLLVM.html#adding-a-new-type
但是,我想要一种使用LLVM C ++ API定义和使用新类型的方法,因为我可以使用函数等。
我能想到的另一种方法是保留我的自定义类型及其LLVM基本类型的单独记录,并在声明函数时使用基本类型;但是如果LLVM本身内置了更快捷的方法,我就不想开始这样做了(正如我通过查看一些LLVM IR示例并生成上面的代码所发现的那样)。
编辑:我已经做了一些调查,我发现了一个函数的引用,这似乎正是我在http://llvm.org/docs/ProgrammersManual.html中所需要的addTypeName
所需要的并且在http://llvm.org/doxygen/Module_8h-source.html中,但是这似乎是全部,因为我在实际文档中看不到对addTypeName
的任何引用,我无法使用addTypeName
编译程序,因为它声称方法不存在。
答案 0 :(得分:4)
最简单的方法是使用cpp后端(llc -march = cpp) - 给定IR,它将生成重现IR所需的C ++ API调用序列。