Мы можем использовать LLVMVerifyModule
для проверки согласованности модулей внутри кода. Но представьте, что мы создали файл LLVM IR вручную. Этот файл может быть синтаксически правильным, но я хочу запустить что-нибудь для его очистки.
Рассмотрим следующий модуль:
; ModuleID = 'main'
source_filename = "main"
define void @gl.main() {
entry:
ret void
ret void
}
Я полагаю, что это неправильно, поскольку он содержит два возврата в одном блоке. Я пробежал llvm-as
, но все прошло. Я правильно понимаю? Какую команду вы запускаете для проверки рукописного исходного файла LLVM?
update:
opt
не обрабатывает sh, а вместо этого выводит этот файл:
; ModuleID = 'try.bc.2'
source_filename = "main"
define void @gl.main() {
entry:
ret void
0: ; No predecessors!
ret void
}