在“组合”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 与调用指令组合在一起。我不确定“组合”是否是正确的短语,但是,我如何在这里检测到免费?

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

谢谢!

穆罕默德·伊斯梅尔

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章