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

时间:2016-03-07 04:31:26

标签: llvm

array[5] = 20;

等效LLVM IR

%arrayidx = getelementptr inbounds i32, i32* %2, i64 5
store i32 20, i32* %arrayidx, align 4

如何从LLVM IR中提取5?

1 个答案:

答案 0 :(得分:2)

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

if (ConstantInt *CI = dyn_cast<ConstantInt>(GEP->getOperand(1)) {
    uint64_t Idx = CI->getZExtValue();
}