You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LLVM指令中获取被赋值的变量?

解决LLVM IR中获取赋值指令左侧变量的问题

在LLVM的API里,你要找的左侧被赋值的变量(比如%1、%3),其实就是指令本身对应的Value对象。因为LLVM里所有的Instruction都是Value的子类——这些指令执行后产生的结果,就是你看到的左侧标识符。

举个具体的代码示例(假设你在遍历Function里的BasicBlock和Instruction):

// 遍历函数中的每个基本块
for (BasicBlock &BB : F) {
    // 遍历基本块中的每条指令
    for (Instruction &I : BB) {
        // 直接将当前指令转换为Value*,这就是左侧的%1、%3这类变量
        Value *assignedValue = &I;
        
        // 可以根据指令类型做进一步判断,比如只处理alloca和load指令
        if (isa<AllocaInst>(I) || isa<LoadInst>(I)) {
            // 这里的assignedValue就是你要的%1、%3对应的Value*,可以存起来供后续使用
            yourStorageVector.push_back(assignedValue);
        }
    }
}

补充说明:

  • getOperand()是用来获取指令的右侧操作数(比如load指令里的%2),而指令自身就是左侧的结果值。
  • 如果需要验证,可以调用assignedValue->getName(),会返回对应的标识符字符串(比如"%1"、"%3")。

内容的提问来源于stack exchange,提问作者hahastof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:10:23