有没有办法从值而不是整数中提取或插入索引处的元素?我希望能够使用类似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,因此零索引不是必需的(。