有没有办法从值而不是int中提取或插入索引处的元素?我希望能够使用ExtractElementInst
之类的东西,但是对于数组而不是向量。
现在我正在做
mBuilder.CreateExtractValue(refArray, index)
但是,我需要能够将Value *
传递给它,因为我希望能够在变量值的索引处访问数组元素。例如:
array[i]
使用上面的代码,我仅限于:
array[0]
答案 0 :(得分:1)
要使用任意非常量索引执行地址算术,您需要使用"Server=DESKTOP-BCQ6IAU\\CHATDB;Database=MultiRoomChat;Trusted_Connection=True;"
指令,该指令是使用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
指令(因为我们正在使用指向int的指针,而不是指针to array to int,所以零索引不是必需的。)