Чтение и создание дополнительного возвращаемого значения во FLAGS в LLVM - PullRequest
2 голосов
/ 24 сентября 2019

Я смотрел выступление Херба Саттера на CppCon 2019, и одна идея состоит в том, чтобы использовать биты регистра контрольного флага, чтобы отметить, что исключение было произведено во время вызова функции.Например (при условии целевого значения x86), функция, которая выдает ошибку, может выдать инструкцию stc непосредственно перед возвратом, и вызывающая сторона может выполнить условный переход сразу после своего возврата, чтобы проверить, должна ли быть обработана ошибка.Это умно, эффективно (намного лучше, чем возвращать флаг условия в отдельный регистр), и это просто.

Однако как можно реализовать что-то подобное в LLVM?Я полагаю, что можно использовать MachineBasicBlock для генерации интрузий с набором флагов, но есть ли гарантия, что LLVM впоследствии не вставит инструкцию, которая может изменить значение флага?Кроме того, как можно проверить значение флага и перейти к блоку LLVM IR?

Обратите внимание, что моя мотивация - просто любопытство.На самом деле я не работаю над компилятором - я просто хочу знать, как эти вещи работают.

...