Описание тега strength-reduction

Замена дорогостоящих операций на более дешевые. Классический пример: x = n * i в цикле становится x += n.

Снижение прочности - это практика оптимизации путем замены дорогостоящих операций более дешевыми. (См. https://en.wikipedia.org/wiki/Strength_reduction).

Классический пример:

for (int i=0 ; i<1024 ; i++) {
    a[i] = b[i * 33];
}

может быть преобразован компилятором или человеком в код, реализующий его как

int i33 = 0;
for (int i=0 ; i<1024 ; i++) {
    a[i] = b[i33];
    i33 += 33;
}

Умножение все еще несколько дороже, чем добавление на современных компьютерах, и компиляторы прилагают некоторые усилия, чтобы заменить их одной или двумя сменами + инструкции сложения. См., Например, Как умножить регистр на 37, используя только 2 последовательные инструкции leal в x-86?

Другой пример - оптимизация n % 4 к n & 3 (для неподписанных nили в более сложную последовательность для подписанных n), потому что инструкции аппаратного деления по-прежнему очень дороги.