如何在LLVM中获取指向赋值给Value的Instruction的指针?
获取LLVM中为Value赋值的Instruction指针
在LLVM里,你要的逻辑其实很直接——像示例里的%add这种“变量”,本质就是定义它的那条add指令本身。因为LLVM里所有能产生值的指令(比如add、sdiv)都继承自Value,所以你手里的Value* val如果指向的是%add,那它本身就是你要找的Instruction实例。
你之前写的dyn_cast<Instruction>(val)其实已经踩对了点,只需要完善一下类型检查的逻辑就行,不需要绕到BasicBlock里找。完整代码示例:
// 假设val是指向%add的Value*指针 Instruction *assignInst = dyn_cast<Instruction>(val); if (assignInst) { // 这里assignInst就是那条%add = add nsw i32 %aa, %bb指令 // 还可以进一步验证指令类型,比如判断是不是二元运算: if (isa<BinaryOperator>(assignInst)) { // 确认是add、sdiv这类二元指令 } } else { // 注意:如果val指向的是函数参数、全局变量这类不是指令产生的值,转换会失败,这里要做容错处理 }
补充说明:只有当val是由指令生成的值时,这个转换才有效。如果val是函数的形参、全局变量或者常量,那它本身不是Instruction,转换结果会是nullptr,这种情况要根据你的业务逻辑做额外处理。
内容的提问来源于stack exchange,提问作者alienobserver
相关产品推荐
相关产品推荐

