Интересно, можно ли сделать так, чтобы инструмент LLVM opt
подробно сообщал, какие этапы оптимизации успешно используются на каждом уровне оптимизации, например -O1
, -O2
, et c.
Например, вот наивный битовый код файла foo.bc
:
define dso_local i32 @main() #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
%3 = alloca i32, align 4
store i32 0, i32* %1, align 4
store i32 1, i32* %2, align 4
store i32 1, i32* %3, align 4
%4 = load i32, i32* %2, align 4
ret i32 %4
}
А вот битовый код, полученный после запуска opt -O1 foo.bc -o foo.opt.bc
; Function Attrs: noinline norecurse nounwind readnone uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
ret i32 1
}
Как получить информацию о проходах, применяемых LLVM opt
в приведенной выше оптимизации?
Я пытался использовать несколько флагов opt
LLVM 10.0, например --pass-remarks-filter
, --debugify-each
, --verify-each
, --lto-pass-remarks-filter
, et c, но ни один из них не работает.
Кто-нибудь знает, как получить такую информацию?