В этом нет ничего особенного. Было конструктивное решение собирать статистику только в сборках + 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 достигает этой цели, и это совершенно понятно. Тем не менее, это всего лишь предположение, поскольку я не мог найти подходящего обсуждения в архивах списков рассылки.
Можете ли вы включить вывод 'opt -version'? –