本文介绍了如何从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值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-11 04:51