本文介绍了如何从llvm.dbg.declare获取IR值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出llvm.dbg.declare
,如何获取其llvm值?
Given a llvm.dbg.declare
, how can I get its llvm value?
例如
call void @llvm.dbg.declare(metadata !{i32** %r}, metadata !23), !dbg !24
我想获取值i32** %r
,而不是元数据!{i32** %r}
.
I want get the Value i32** %r
, not the metadata !{i32** %r}
.
请给我代码!
谢谢!
推荐答案
metadata !{i32** %r}
是调用指令的第一个操作数,而i32** %r
是元数据的第一个操作数.所以这样的事情应该起作用:
metadata !{i32** %r}
is the 1st operand of the call instruction, and i32** %r
is the 1st operand of the metadata. So something like this should work:
CallInst I = ... // get the @llvm.dbg.declare call
Value* referredValue = cast<MDNode>(I->getOperand(0))->getOperand(0);
这篇关于如何从llvm.dbg.declare获取IR值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!