LLVM中函数的最后一个基本块

9

在LLVM中,函数的back()是否保证返回CFG的终止基本块?

(翻译说明:CFG是控制流图的缩写,terminator basic block指的是控制流程结束的基本块)

2个回答

6

我认为,因为不存在所谓的“终止BB”:可能会有多个BB通过返回终止。


1
你能给我一个有多个终止基本块的函数的例子吗?即使有多个返回语句,也应该有一个带有phi的基本块来“收集”所有的返回基本块,对吧? - dalibocai
1
实际上,LLVM中甚至有一个名为UnifyFunctionExitNodes的传递,它正是按其名称所述的那样,即消除函数中的多个出口。 - CAFxX

1

不是的。一个函数可能有多个终止基本块,例如包含多个返回语句的函数。每个包含函数返回语句的基本块都将被称为终止块或终止基本块。要检测所有包含返回语句的基本块,即终止基本块,请执行以下操作:

runOnFunction {
   for BB in F:
      for I in BB:
          if (ReturnInst *RI = dyn_cast<ReturnInst> I)
             BB is terminator Basic Block
          endif
      endfor
   endfor
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接