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

Compiler construction LLVM中函数的最后一个基本块,compiler-construction,llvm,Compiler Construction,Llvm,函数的back()是否保证返回LLVM中CFG的终止符基本块?我不认为,因为没有“终止符BB”这样的东西:很可能有多个BB被一个返回符终止。否。一个函数可能有多个终止符基本块,例如,包含多个返回语句的函数。包含函数返回语句的每个基本块将被称为终止块或终止基本块。要检测作为终止符基本块(即包含返回语句)的所有基本块,请执行以下操作: runOnFunction { for BB in F: for I in BB: if (ReturnInst *RI = d

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

我不认为,因为没有“终止符BB”这样的东西:很可能有多个BB被一个返回符终止。

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

runOnFunction {
   for BB in F:
      for I in BB:
          if (ReturnInst *RI = dyn_cast<ReturnInst> I)
             BB is terminator Basic Block
          endif
      endfor
   endfor
}
runOnFunction{
对于F中的BB:
对于BB中的I:
如果(返回inst*RI=dyn\u cast I)
BB是终端基本块
恩迪夫
外循环
外循环
}

你能给我一个有多个终止符BBs的函数的例子吗?即使有多个返回,也应该有一个带有phi的BB来“收集”所有返回BB,对吗?不,事实上,甚至还有一个名为UnifyFunctionExitNodes的过程,它完全按照其名称执行,即从一个函数中删除多个出口