Какие инструкции LLVM могут выйти из функции? - PullRequest
0 голосов
/ 12 сентября 2018

Моя цель - определить все возможные точки выхода из функции LLVM.Я знаю, что инструкции-терминаторы заканчивают базовые блоки либо для выхода из функции, либо для перехода к другой части той же функции.Из инструкций терминатора мне ясно по большинству из них:

  • ret и resume выход из функции
  • br, switch, indirectbr ответвлениек другим блокам в той же функции
  • invoke, catchswitch, относящимся к потоку управления исключениями, а также не должен выходить из функции
  • (unreachable для этой цели можно игнорировать)

Я хотел бы получить разъяснения по catchret и cleanupret.Я скомпилировал пример кода обработки исключений (clang++ на Mac и Ubuntu) и не вижу этих инструкций в скомпилированном IR LLVM.Они используются только для определенных ABI?

...