Llvm Инструкция по удалению терминатора

Я хочу удалить UnreachableInst, так как предыдущее преобразование сделало его достижимым. Тем не менее, вызов eraseFromParent() дает мне некорректный BasicBlock, так как UnreachableInst является терминатором его BasicBlock. Как я могу исправить BasicBlock, чтобы завершить по инструкции, предшествующей UnreachableInst?

1 ответ

Решение

Каждый базовый блок должен заканчиваться терминатором. Я думаю, что самый простой способ удалить недостижимую инструкцию - заменить ее другим терминатором - например, переходом в следующий базовый блок, инструкцией возврата и т. Д.

Взгляни на llvm::ReplaceInstWithInst в BasicBlockUtils.h для удобного способа заменить одну инструкцию другой.

Другие вопросы по тегам