Я думаю, что интересным является то, что обычный компилятор не может сделать вопреки JIT. Методы встраивания, устранение мертвого кода, CSE, анализ в реальном времени и т. Д. Также выполняются обычным компилятором c ++, здесь нет ничего «особенного» * 1001 *
Но что-то оптимизировать, основываясь на оптимистических предположениях, а потом деоптимизировать, если они окажутся неправильными? (предполагая определенный тип, удаляя ветки, которые впоследствии все равно будут терпеть неудачу, если не будут выполнены, ..) Удалять виртуальные вызовы, если мы можем гарантировать, что в настоящий момент существует только один класс (опять то, что надежно работает только с деоптимизацией)? Я думаю, что адаптивная оптимизация действительно отличает JIT от вашего запуска компилятора mill c ++.
Возможно, также упомяните профилирование во время выполнения, выполненное JIT, чтобы проанализировать, какие оптимизации он должен применить (хотя это уже не уникально для всех оптимизаций, управляемых профилем).