我正在尝试编写一个LLVM分析传递(函数传递),它检测循环和if / else条件以识别可能的函数调用序列和不可能的函数。
为了检测循环,我使用LoopInfoWrapperPass中的LoopInfo,有人知道if / else条件是否有这样的工具?
答案 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