在LLVM中定义新类型

时间:2013-04-01 15:00:51

标签: types llvm llvm-ir

在一个非常简单的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编译程序,因为它声称方法不存在。

1 个答案:

答案 0 :(得分:4)

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