types - 在 LLVM 中定义新类型

标签 types llvm llvm-ir

在一个非常简单的 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 示例并生成上面的代码所发现的那样),我不想开始这样做。

编辑:我做了更多的环顾四周,我发现了一个对函数的引用,它似乎正是我需要的函数 addTypeNamehttp://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/

相关文章:

c++ - 在 C++ 中创建 Typedef

c - 默认情况下,char 是有符号的还是无符号的?

pointers - 戈朗 : Why selector to pointers is illegal after comparison?

ios - Xcode 10.2 iOS Swift (+ React Native) 项目编译错误

llvm - 是否有类似 BNF 的语法来描述 LLVM IR?

c++ - 从 LLVM 生成二进制文件

c - 如何从给定 LLVM IR 的源代码中获取变量的所有行号?

scala - 具有通用返回类型的可选函数参数

llvm - 基于LLVM的语言可以用于操作系统开发吗?

clang - 在LLVM IR中,如何打印未命名值的名称,该名称表示为带有前缀(如%2)的无符号数字值?