llvm:检测函数传递中的 if/else 条件

llvm : detect if/else conditions in function pass

我正在尝试编写一个 LLVM 分析过程(函数过程)来检测循环和 if/else 条件以识别可能的函数调用序列和不可能的函数调用序列。

为了检测循环,我使用了 LoopInfoWrapperPass 中的 LoopInfo,有人知道是否有针对 if/else 条件的此类工具吗?

如果你只想检测简单的 if-else 结构(没有任何其他嵌套的 if-else)那么它很简单,2 个块只有一个相同的后继(BB->getUniqueSuccessor ()) 和 alse一个相同的 predesessor(BB->getUniquePredecessor()) 是 "if" 和 "else" 块。对于嵌套结构,它会有点复杂,递归函数也需要支配边界信息

现在我在想,我想知道我是否不能只使用 BasicBlocks 名称来做这个。因为如果基本块被命名为 "if.then / if.else"

您可以使用 block-name.
如果您的 BasicBlock 是 B,请使用 B->getName() 获取块的名称。

if.then  => if block
if.else  => else-if block
if.end   => block after if-else blocks
for.cond => condition of for loop
for.body => body of foor loop
for.end  => block after foor loop