指针所有权语义,附加调试信息和" unsigned"在LLVM中的用法

时间:2015-03-21 05:04:12

标签: llvm llvm-ir llvm-c++-api

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

1 个答案:

答案 0 :(得分:2)

最好将此分为3个问题,但为了回答第3个问题,我在今年的美国LLVM开发者大会上做了一个关于这个问题的讨论:

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

你也可以使用我后来编写的文档作为指南:

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

相关问题