在一个非常简单的 LLVM IR 程序中,我可以做到
%MyStruct = type { i32 }
%MyInt = type i32
declare void @main(%MyStruct, %MyInt)
但是,我不知道如何产生相同的
%MyStruct = type { i32 }
或 %MyInt = type i32
使用 LLVM C++ API 的语句。过去几天我一直在搜索文档,我发现唯一接近我想要的东西是手动定义这里提到的新类型:http://llvm.org/docs/ExtendingLLVM.html#adding-a-new-type但是,我想要一种使用 LLVM C++ API 定义和使用新类型的方法,就像我可以使用函数等一样。
我能想到的唯一另一种方法是单独记录我的自定义类型和它们的 LLVM 原始基类型,并在声明函数时使用原始基类型;但是如果 LLVM 本身内置了一种更快的方法(正如我通过查看一些 LLVM IR 示例并生成上面的代码所发现的那样),我不想开始这样做。
编辑:我做了更多的环顾四周,我发现了一个对函数的引用,它似乎正是我需要的函数
addTypeName
在 http://llvm.org/docs/ProgrammersManual.html还有 http://llvm.org/doxygen/Module_8h-source.html ,但是这似乎就是全部,因为我看不到任何对 addTypeName
的引用。在实际文档中,我无法使用 addTypeName
编译程序因为它声称该方法不存在。
最佳答案
对您来说最简单的方法是使用 cpp 后端 (llc -march=cpp) - 给定 IR,它将生成重现 IR 所需的 C++ API 调用序列。
关于types - 在 LLVM 中定义新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745857/