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

问题描述 投票:0回答:1

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

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

我想寻求有关

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

llvm llvm-ir
1个回答
0
投票

根据此(https://github.com/llvm-mirror/llvm/blob/master/include/llvm/IR/Instruction.def#L127-L137),您有一个块终止指令列表。正如其他评论所述,这里有一个文档页面解释了异常处理说明https://llvm.org/docs/ExceptionHandling.html

© www.soinside.com 2019 - 2024. All rights reserved.