从值 - LLVM 中提取/插入索引处的元素



有没有办法从值而不是整数中提取或插入索引处的元素?我希望能够使用类似ExtractElementInst的东西,但用于数组而不是向量。

现在我正在做

mBuilder.CreateExtractValue(refArray, index)

但是,我需要能够Value *传递它,因为我希望能够在变量值的索引处访问数组元素。例如:

array[i]

使用上面的代码,我仅限于:

array[0]

要使用任意、非常量索引执行地址算术,您需要使用getelementptr指令,该指令是使用CreateGEP函数创建的。

请注意,getelementptr需要其参数作为指针,因此您需要直接使用保存数组的全局变量或alloca,而不是先读取它。这也意味着您需要一个零作为指针后面的第一个索引。总而言之,生成的代码读取array[i]应如下所示:

@array = global [3 x i32] [1,2,3]
define void f() {
%i = ; calculuate the index here
%array_i_ptr = getelementptr [3 x i32], [3 x i32]* @array, i32 0, i32 %i
%array_i_value = load i32, i32* array_i_ptr
; do something with %array_i_value
ret
}

在这里,我假设array是一个全局变量。对于局部变量,应改用alloca。对于动态分配的数组,您将调用malloc,没有数组类型和只有一个索引的getelementptr指令(因为我们将使用指向 int 的指针,而不是指向数组的指针到 int,因此零索引不是必需的(。

最新更新