Loops LLVM:getUniqueExitBlock()的用法
如何在我的llvm过程中使用Loops LLVM:getUniqueExitBlock()的用法,loops,llvm,Loops,Llvm,如何在我的llvm过程中使用LoopInfo.h中的函数Loops::getUniqueExitBlock()?我不明白,如何为特定循环调用此函数 getUniqueExitBlock()的文档说明: getUniqueExitBlock-如果getUniqueExitBlocks只返回一个 布洛克,把那块还给我 否则返回null 这告诉我们,getUniqueExitBlock()是一种检查循环是否只有一个出口块的方便方法。如果是,则返回它-否则返回null 假设您有一种获取循环对象的方法,您
LoopInfo.h
中的函数Loops::getUniqueExitBlock()
?我不明白,如何为特定循环调用此函数 getUniqueExitBlock()的文档说明: getUniqueExitBlock-如果getUniqueExitBlocks只返回一个 布洛克,把那块还给我 否则返回null 这告诉我们,
getUniqueExitBlock()
是一种检查循环是否只有一个出口块的方便方法。如果是,则返回它-否则返回null
假设您有一种获取循环
对象的方法,您可以通过执行以下操作来使用此函数
auto loop = get_loop() // you have to write this part
auto exit = loop->getUniqueExitBlock() // calls the function
if(exit != nullptr) {
// exit points to the block that the loop jumps to when it exits
} else {
// exit is null - this means that the loop either has more than one exit block or no exit blocks. deal with this case
}
可以找到所有LLVMAPI的文档。有时API的文档记录得不是很好,新的
属性API就是这样。在本例中,通过代码本身查找LLVM代码库中使用的函数的示例非常有用。例如,getUniqueExitBlock()
的文档告诉我们它是由内部引用的。这个例子可以帮助您理解如何正确使用getUniqueExitBlock()
是的,我想问的是,如何开始使用函数get\u loop()
。有几种方法可以做到这一点。一种方法是编写一个循环过程(),实际上,我已经在模块过程中进行了一些插装。我可以在模块过程本身中使用integrate it吗?您可以通过重写getAnalysisUsage(AnalysisUsage&)
函数在模块过程中获取分析信息。更多信息请访问。您可以使用此函数来要求LoopInfo分析过程,然后在LoopInfo中迭代循环列表。正如Matt所说,有几种方法可以做到这一点,您也可以使用“loop->getExitBlocks(ExitBBs)”,然后选中“ExitBBs->size()”。若它有助于使循环具有一个出口块,那个么将AU.addRequiredID(LoopSimpleId)添加到过程的getAnalysisUsage(),因为LoopSimpleId可能会减少出口块的数量。