Llvm Инструкция по удалению терминатора
Я хочу удалить UnreachableInst, так как предыдущее преобразование сделало его достижимым. Тем не менее, вызов eraseFromParent() дает мне некорректный BasicBlock, так как UnreachableInst является терминатором его BasicBlock. Как я могу исправить BasicBlock, чтобы завершить по инструкции, предшествующей UnreachableInst?
1 ответ
Решение
Каждый базовый блок должен заканчиваться терминатором. Я думаю, что самый простой способ удалить недостижимую инструкцию - заменить ее другим терминатором - например, переходом в следующий базовый блок, инструкцией возврата и т. Д.
Взгляни на llvm::ReplaceInstWithInst
в BasicBlockUtils.h для удобного способа заменить одну инструкцию другой.