llvm:检测函数中的if / else条件是否通过

时间:2015-05-22 10:27:37

标签: llvm static-analysis

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

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

3 个答案:

答案 0 :(得分:1)

如果你只是想检测简单的if-else结构(没有任何其他嵌套的if-else)那么它是直接的,2个块只有一个相同的成功者(BB-> getUniqueSuccessor())和alse one并且相同的前身(BB-> getUniquePredecessor())是"如果"和"否则"块。对于嵌套结构,它会有点复杂,一个递归函数,它也需要支配者边界信息

答案 1 :(得分:-1)

现在我正在考虑它,我想知道我是否不能只使用BasicBlocks名称来做到这一点。如果基本块被命名为" if.then / if.else"

答案 2 :(得分:-1)

您可以使用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