LLVM IR:当作为参数传递给函数时,如何在 llvm ir 代码中获取数组的大小?

rol*_*alf 2 llvm llvm-ir

我有一个将数组作为参数的函数,我需要在函数中首先获取数组的大小。我需要在 LLVM IR 中执行此操作。这可能吗?我可以访问数组,但我不知道大小。

void test(int[] a) {

} 
Run Code Online (Sandbox Code Playgroud)

现在正在翻译为

define void @test(i32* %__p__a) {
entry: 
       %a = alloca i32*, align 4
       store i32* %__p__a , i32** %a, align 4
       ret void
}
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 5

我需要在函数中首先获取数组的大小。我需要在 LLVM IR 中执行此操作。这可能吗?

如果你所拥有的只是一个i32*没有关于它指向什么的附加信息,那么不,这是不可能的。为了获得数组的大小,您需要将该信息存储在test函数可以访问它的地方。

由于这是您自己的语言,并且您可以控制生成的 LLVM IR 的外观,例如,您可以将数组表示为包含数组大小和指向数据的指针的结构。