如何在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
相关产品推荐
相关产品推荐

