Расщепление цикла () — оптимизация компилятора, которая пытается упростить цикл или устранить зависимости в цикле, разбив его на несколько частей, имеющих одно и то же тело исходного цикла и различные диапазоны счётчика.

Отслаивание цикла Отслаивание цикла (разгрузка цикла, от англ. loop peeling) является частным случаем расщепления цикла, при котором из основного цикла выносятся одна или несколько зависимых итераций.

Пример Например, следующий код на языке Си: int p = 10; for (int i = 0; i < 10; ++i) { y[i] = x[i] + x[p]; p = i; }

в результате применения оптимизации преобразовывается в: y = x + x; for (int i = 1; i < 10; ++i) { y[i] = x[i] + x[i-1]; }

Таким образом, компилятор выносит первую итерацию, при которой p = 10, и изменяет цикл, ведь в остальных итерациях p = i-1.

Новый код равносилен предыдущему, однако устраняет необходимость в переменной р внутри тела цикла.

Впервые данная оптимизация появилась в GCC версии 3.4, и улучшилась в версии 7.

Примечания

Литература

Категория:Оптимизации компилятора