Если Simplescalar поддерживает двоичные файлы ARM и x86 ELF, его можно использовать с программами, скомпилированными в LLVM.
Но если вы хотите выполнить простое профилирование (сколько времени занимает каждая часть программы при работе на реальном CPU)Вы можете проверить более известные профилировщики, такие как:
- google-perftools или
- callgrind / cachegrind или
- oprofile.
Youне может просто запустить IR LLVM, потому что IR LLVM не поддерживается в SimpleScalar или в обычных профилировщиках.IR поддерживается lli и другими инструментами llvm.
Если вы хотите профилировать, какие ветви используются и как часто, существует профилирование LLVM для PGO (оптимизация на основе профилей).Есть утилита llvm-prof и utils/profile.pl
скрипт для профилирования IR-программ LLVM.
Howto из utils/profile.pl
source:
# Program: profile.pl
#
# Synopsis: Insert instrumentation code into a program, run it with the JIT,
# then print out a profile report.
#
# Syntax: profile.pl [OPTIONS] bytecodefile <arguments>
#
# OPTIONS may include one or more of the following:
# -block - Enable basicblock profiling
# -edge - Enable edge profiling
# -function - Enable function profiling
# -o <filename> - Emit profiling information to the specified file, instead
# of llvmprof.out
#
# Any unrecognized options are passed into the invocation of llvm-prof
Внутренне это
- запуска opt с некоторым
-insert-*-profiling
Pass.вывод инструментируется IR - запуск IR с помощью lli (с надеждой на использование JIT)
- запуск llvm-prof для преобразования llvmprof.out в читаемый текст
PS есть несколько исследовательских работ по профилированию LLLVM: llvm.org/pubs/2010-04-NeustifterProfiling.pdf