Loops 在LLVM CFG中识别循环

Loops 在LLVM CFG中识别循环,loops,llvm,nodes,edges,control-flow-graph,Loops,Llvm,Nodes,Edges,Control Flow Graph,我正在llvm中编写一个过程,该过程将识别循环不变量,并将使用这些不变量的指令提升到循环体上方。但为此,我需要知道从一个节点到另一个节点是否有任何后缘。例如,我想找出从节点N到节点H是否有一条后缘,其中节点H支配节点N,这将帮助我识别一个自然循环。如何找到CFG中从一个节点到另一个节点的任何边?我在LLVM中找不到任何名为CFG的类,我可以从中收集此信息。您可以自己滚动(通过使用succu迭代器/succu begin/succu end对基本块的后续块进行迭代)或者您可以使用。如果您调用pas

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

您可以自己滚动(通过使用
succu迭代器
/
succu begin
/
succu end
对基本块的后续块进行迭代)或者您可以使用。

如果您调用pass,它将保证到循环标头只有一个后缘。这是一个转换过程,因此修改了CFG,但它使额外的CFG攻击变得更加简单