0

假设我有以下 LLVM IR

定义 void @foo(i32* %a, i32* %m) nounwind { ...

我通过为第一个 arg 传递一个数组并为 m 传递一个变量的地址来调用 foo。现在,我需要分析 foo 的 arg 列表并确定哪个 arg 传递了一个数组,而哪个只是一个指针地址。我知道两者实际上都是地址,但是 LLVM 是否提供某种元数据,以便我可以静态确定传入的类型。

注意:我正在写一个选择通行证

4

1 回答 1

1

您可能可以改用“指向数组的指针”类型:

define void @foo([0 x i32]* %a, i32* %m)

零大小的数组是完全有效的,llvm 文档说:

对超出静态类型隐含的数组末尾的索引没有限制

于 2013-06-22T19:17:51.163 回答