我最近开始为我的项目使用LLVM IR生成API。文档和LLC工具非常有用,但我无法找到以下答案 -
问题1 - 指针所有权语义
使用API创建LLVM IR指令的所有代码似乎都是“新”指令,而不是将它们创建为堆栈变量。
auto x = new Alloca(...) vs. Alloca(...) x;
我想知道所创建的指针的所有权语义是什么?我是否必须在这些指令对象上调用delete。我见过的所有代码都称为“删除引擎;”。
我猜测所有这些内存都归这个Module对象所有,当模块被销毁时,这些指令占用的所有内存也会被破坏。通过查看一些代码,似乎所有这些指令对象都是使用“placement new”创建的......这种理解是否正确?
问题2 - 为什么LLVM IR API采用“无符号”数据类型args。 (例如,无符号地址空间是一个常见的参数。为什么不像uint32_t那样大小的类型?)
问题3 - 如何将调试信息附加到IR指令?指向LLVM API以附加调试信息的指针非常有用。
答案 0 :(得分:2)
最好将此分为3个问题,但为了回答第3个问题,我在今年的美国LLVM开发者大会上做了一个关于这个问题的讨论:
http://llvm.org/devmtg/2014-10/#tutorial3
你也可以使用我后来编写的文档作为指南: