我已经生成了以下bitcode。 fuelTank
是一个传递给名为getEngineValue(int x[])
的函数的数组。
%fuelTank = alloca [5 x i32], align 4
call void @llvm.dbg.declare(metadata !{[5 x i32]* %fuelTank}, metadata !39), !dbg !40
%0 = bitcast [5 x i32]* %fuelTank to i8*, !dbg !40
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %0, i8* bitcast ([5 x i32]* @_ZZ12checkFuelSysvE8fuelTank to i8*), i32 20, i32 4, i1 false), !dbg !40
call void @_Z17getFuelIndicationPi(i32* getelementptr inbounds ([5 x i32]* @piston, i32 0, i32 0)), !dbg !41
%arraydecay = getelementptr inbounds [5 x i32]* %fuelTank, i32 0, i32 0, !dbg !42
call void @_Z14getEngineValuePi(i32* %arraydecay), !dbg !42
ret void, !dbg !43
我想读取存储在fuelTank
数组中的值。我想我可以从alloca
指令中读取它,但无法找到它的任何成功。
注意:我知道如何使用@llvm.memcpy
访问数组,但我不希望这样。
答案 0 :(得分:1)
要从[5 x i32]
获取%fuelTank
类型的值,您可以使用load
指令来读取其内容。
如果您只想要存储在单个数组索引(类型为i32
)中的内容,则可以使用getelementptr
获取特定索引的地址,然后使用load
,或者您可以先load
然后通过extractvalue
指令获取单个值。