我最近开始为我的项目使用 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 以附加调试信息的指针将非常有用。