Как современные оптимизирующие компиляторы определяют, когда применять определенные оптимизации, такие как развертывание цикла и вставка кода?
Поскольку оба эти фактора влияют на кеширование, наивные функции с числом строк меньше X или любой другой простой эвристикой могут привести к ухудшению производительности кода. Итак, как современные компиляторы справляются с этим?
Мне трудно найти информацию по этому вопросу (особенно информацию, которая достаточно проста для понимания ..), лучшее, что я смог найти, это статья википедии . Любые подробности, ссылки на книги / статьи / документы приветствуются!
РЕДАКТИРОВАТЬ: Поскольку ответы говорят в основном о двух упомянутых мною оптимизациях (встраивание и развертывание цикла), я просто хотел уточнить, что меня интересуют все и любые оптимизации компилятора, а не только эти две. Меня также больше интересуют оптимизации, которые могут быть выполнены во время предварительной компиляции, хотя JIT-оптимизация также представляет интерес (хотя и в несколько меньшей степени).
Спасибо!