2

我最近开始为我的项目使用 LLVM IR 生成 API。文档和 LLC 工具非常有用,但我无法找到以下问题的答案 -

问题 1 - 指针所有权语义

所有使用其 API 创建 LLVM IR 指令的代码似乎都是“新”指令,而不是将它们创建为堆栈变量。

auto x = new Alloca(...) vs. Alloca(...) x;

我想知道创建的指针的所有权语义是什么?我是否必须对这些指令对象调用删除。我见过的所有代码都称为“删除引擎;”。

我猜所有这些内存都归这个 Module 对象所有,当模块被销毁时,这些指令占用的所有内存也被销毁。通过查看一些代码,似乎所有这些指令对象都是使用“placement new”创建的……这种理解正确吗?

问题 2 - 为什么 LLVM IR API 采用“无符号”数据类型参数。(例如,无符号地址空间是一个常见的论点。为什么不是像 uint32_t 这样的大小类型?)

问题 3 - 如何将调试信息附加到 IR 指令?指向 LLVM API 以附加调试信息的指针将非常有用。

4

1 回答 1

2

最好将其拆分为 3 个问题,但为了回答第三个问题,我在今年的美国 LLVM 开发者大会上就这个问题做了一次演讲:

http://llvm.org/devmtg/2014-10/#tutorial3

您还可以使用我之后编写的文档作为指导:

http://llvm.org/docs/tutorial/LangImpl8.html

于 2015-03-23T03:04:21.247 回答