如何从llvm的getelementptr指令中提取数组索引值

如何从llvm的getelementptr指令中提取数组索引值,llvm,Llvm,等效LLVM-IR array[5] = 20; 如何从LLVM IR中提取5?如果您有一个GetElementPtrInst*GEP,您可以使用GEP->GetOperator(i)访问索引(操作数0为指针,其余操作数为索引)。要获取值5,您可以检查索引是否为ConstantInt,如果是,则获取其值,如下所示: %arrayidx = getelementptr inbounds i32, i32* %2, i64 5 store i32 20, i32* %arrayidx, align

等效LLVM-IR

array[5] = 20;

如何从LLVM IR中提取5?

如果您有一个
GetElementPtrInst*GEP
,您可以使用
GEP->GetOperator(i)
访问索引(操作数0为指针,其余操作数为索引)。要获取值5,您可以检查索引是否为
ConstantInt
,如果是,则获取其值,如下所示:

%arrayidx = getelementptr inbounds i32, i32* %2, i64 5
store i32 20, i32* %arrayidx, align 4
if(ConstantInt*CI=dyn\u cast(GEP->getOperand(1)){
uint64_t Idx=CI->getZExtValue();
}

如果您有一个
GetElementPtrInst*GEP
,您可以使用
GEP->getOperator(i)
访问索引(操作数0是指针,其余操作数是索引)。要获取值5,您可以检查索引是否为
ConstantInt
,如果是,则获取其值,如下所示:

%arrayidx = getelementptr inbounds i32, i32* %2, i64 5
store i32 20, i32* %arrayidx, align 4
if(ConstantInt*CI=dyn\u cast(GEP->getOperand(1)){
uint64_t Idx=CI->getZExtValue();
}

<代码>你是指使用C++ API?你是指使用C++ API?如果它不是常数,而是指令?如果我们有<代码> a=5,数组[A]就会发生这种情况。=0;
。如何访问
a
的值?您无法访问a的值,因为它可能依赖于编译时未知的输入,例如用户输入。其他提问者的答案不完整。如何获取“GetElementPtrInst*GEP”?如果它不是常量,而是指令呢?当我们有
a=5;数组[a]时会发生这种情况=0;
。如何访问
a
的值?无法访问a的值,因为它可能依赖于编译时未知的输入,例如用户输入。其他提问者的答案不完整。如何获取“GetElementPtrInst*GEP”?