我正在 llvm 中编写一个传递,它将识别循环不变量并将那些使用这些不变量的指令提升到循环体上方。但为此,我需要知道从一个节点到另一个节点是否有任何后沿。例如,我想找出从节点 N 到节点 H 是否存在后沿,其中节点 H 支配节点 N,这将帮助我识别自然循环。如何在 CFG 中找到从一个节点到另一个节点的任何边?我在 LLVM 中找不到任何名为 CFG 的类,我可以从中收集这些信息。
问问题
1602 次
2 回答
0
succ_iterator
您可以自己滚动(通过使用/ succ_begin
/遍历基本块的后继者succ_end
),或者您可以使用LoopInfo
.
于 2012-05-31T07:32:51.007 回答
0
如果你调用loop-simplify pass,它将保证循环头只有一个后边。这是一个转换过程,因此修改了 CFG,但它使额外的 CFG 黑客攻击变得更加简单。
于 2020-10-25T01:59:06.947 回答