индуктивный цикл после оптимизации
Расплатой за отказ от индукции становится появление "лишней" инструкции умножения, однако, накладные расходы на ее выполнение с лихвой окупаются конвейеризацией (а при желании и векторизацией!) цикла. Такая техника оптимизации называется "разбивка длинных цепочек зависимостей" (breaks long dependency chains) и реализована только в последних версиях gcc (за это отвечает ключ -fsplit-ivs-in-unroller), а все остальные рассматриваемые компиляторы на это, увы, не способны.
* msvc: не разбивает длинные цепочки зависимостей
* icl: не разбивает длинные цепочки зависимостей
* gcc: разбивает длинные цепочки зависимостей