我的目标是确定LLVM函数的所有可能的退出点。我知道terminator instructions结束基本块,以退出该功能或分支到同一功能的另一部分。在终止符说明中,我对其中大部分内容很清楚:
ret
和resume
退出功能br
,switch
,indirectbr
分支到同一功能中的其他块invoke
,catchswitch
与异常控制流有关,并且也不应退出该功能unreachable
)我想对catchret
和cleanupret
进行澄清。我已经编译了example exception handling code(在Mac和Ubuntu上为clang++
),但是在编译后的LLVM IR中看不到这些说明。这些仅用于特定的ABI吗?