Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops LLVM:getUniqueExitBlock()的用法_Loops_Llvm - Fatal编程技术网

Loops LLVM:getUniqueExitBlock()的用法

Loops LLVM:getUniqueExitBlock()的用法,loops,llvm,Loops,Llvm,如何在我的llvm过程中使用LoopInfo.h中的函数Loops::getUniqueExitBlock()?我不明白,如何为特定循环调用此函数 getUniqueExitBlock()的文档说明: getUniqueExitBlock-如果getUniqueExitBlocks只返回一个 布洛克,把那块还给我 否则返回null 这告诉我们,getUniqueExitBlock()是一种检查循环是否只有一个出口块的方便方法。如果是,则返回它-否则返回null 假设您有一种获取循环对象的方法,您

如何在我的llvm过程中使用
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可能会减少出口块的数量。