识别LLVM CFG中的循环

时间:2012-05-31 06:06:01

标签: loops llvm edge control-flow-graph

我正在llvm中编写一个传递来识别循环不变量,并在循环体上方提升那些使用这些不变量的指令。但为此我需要知道从一个节点到另一个节点是否有任何后沿。对于例如我想找到从节点N到节点H的后边缘,其中节点H支配节点N,这将帮助我识别自然循环。如何确定CFG中是否存在从一个节点到另一个节点的任何边缘?我在LLVM中找不到任何名为CFG的类,我可以从中收集这些信息。

2 个答案:

答案 0 :(得分:0)

您可以自己推送(通过使用succ_iterator / succ_begin / succ_end迭代基本块的后继者),也可以使用LoopInfo

答案 1 :(得分:0)

如果调用loop-simplify,则将确保循环头只有一个后边缘。这是一次转换,因此修改了CFG,但使其他CFG黑客操作变得更加简单。