我正在llvm中编写一个传递来识别循环不变量,并在循环体上方提升那些使用这些不变量的指令。但为此我需要知道从一个节点到另一个节点是否有任何后沿。对于例如我想找到从节点N到节点H的后边缘,其中节点H支配节点N,这将帮助我识别自然循环。如何确定CFG中是否存在从一个节点到另一个节点的任何边缘?我在LLVM中找不到任何名为CFG的类,我可以从中收集这些信息。
答案 0 :(得分:0)
您可以自己推送(通过使用succ_iterator
/ succ_begin
/ succ_end
迭代基本块的后继者),也可以使用LoopInfo
。
答案 1 :(得分:0)
如果调用loop-simplify,则将确保循环头只有一个后边缘。这是一次转换,因此修改了CFG,但使其他CFG黑客操作变得更加简单。