首页 > 解决方案 > 在“组合”LLVM IR 指令中检测自由功能?

问题描述

我可以使用 getCalledFunction() 在这个 IR 调用指令中轻松找到免费的:

call void @free(i8* %10) #4, !dbg !53 

但是,我似乎不知道如何在此调用指令中找到它:

%call7 = call i32 bitcast (i32 (...)* @free to i32 (%struct.Bar*)*)(%struct.Bar* %7), !dbg !56

该指令将 BitCast 与调用指令相结合。我不确定“组合”是否是正确的短语,但是,我怎样才能在这里检测到 free 呢?

我尝试将 dyn_cast 转换为 Bitcast,但事实并非如此。我什至首先使用了 getCalledOperand() 并尝试将我从中获得的值转换为 BitCast,但它仍然没有检测到它。我将不胜感激。

谢谢!

标签: llvmllvm-ir

解决方案


@arnt 在评论中回答了这个问题,所以我为其他人添加了答案。

@arnt:调用的第一个参数是由 getBitCast 返回的 ConstantExpr。cast(foo)->getOperand(0) 将返回免费的。


推荐阅读