2016-01-15 3 views
1

Я использую индивидуальный прогон LLVM-оптимизации 'mem2reg' на простой c-программе.LLVM -stats option

opt <test>.bc -mem2reg -instcount -o <test>.bc -stats 

после выполнения я вижу вариант статистика не показывает статистику, собранную, и, кажется, что для того, чтобы использовать опцию «-stats», LLVM должны быть составлены с утверждениями включены. Я не понимаю, может ли кто-нибудь помочь мне в этом.

+0

Можете ли вы включить вывод 'opt -version'? –

ответ

1

В этом нет ничего особенного. Было конструктивное решение собирать статистику только в сборках + Assert. Если вы посмотрите на llvm/ADT/Statistic.h, то Statistic класс выглядит следующим образом:

class Statistic { 
public: 
    // Initialization stuff 
#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS) 
    // Actually keeping track of the stat 
#else 
    // Dummy ops that will be optimized away 
#endif 
}; 

Как вы можете видеть, статистика собирается либо когда NDEBUG является не определена (т.е. при сборке утверждает, например, в Release + Assers или Debug + Asserts) или, когда LLVM_ENABLE_STATS определен независимо от типа сборки.

Такая же структура отражается в коде, который печатает статистику.

Вы можете снова включить статистику только путем перестройки. Если вам не нужны или нужны накладные расходы на сборку + Asserts, просто добавьте -DLLVM_ENABLE_STATS в CFLAGS или эквивалент при (re) создании Makefile. Дополнительную информацию о включении утверждений можно найти на странице документации How To Release LLVM.

В связи с тем, что статистика отключена в сборках релизов, это поведение было введено в commit fa785cb22d (март 2013 года, оно приземлилось в версии 3.3), вероятно, чтобы устранить недостаток памяти и производительности, введенный функцией, которая редко бывает интересной, если вы не работаете на самом LLVM.

То есть большинство пользователей компиляторов на основе LLVM, таких как Clang, просто хотят превратить исходный код в исполняемый файл и, возможно, получить значимую диагностику, и они определенно хотят, чтобы компилятор был как можно быстрее, делая это. Они менее обеспокоены тем, как LLVM достигает этой цели, и это совершенно понятно. Тем не менее, это всего лишь предположение, поскольку я не мог найти подходящего обсуждения в архивах списков рассылки.