哪些 LLVM 指令可以退出函数?

Mic*_*lin 5 llvm llvm-ir

我的目标是确定 LLVM 函数的所有可能的退出点。我知道终止符指令结束基本块,要么退出函数,要么分支到同一函数的另一部分。终结者指令中,大部分我都清楚:

  • retresume退出该函数
  • br, switch,indirectbr分支到同一功能中的其他块
  • invokecatchswitch与异常控制流程相关,也不应该退出该函数
  • unreachable为此目的可以忽略)

catchret我想就和寻求澄清cleanupret。我已经编译了示例异常处理代码clang++在 Mac 和 Ubuntu 上),但在编译的 LLVM IR 中没有看到这些指令。这些仅用于特定 ABI 吗?