Interested Article - Свёртка констант

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

Свёртка констант

Свёртка констант — оптимизация, вычисляющая константные выражения на этапе компиляции. Прежде всего, упрощаются константные выражения, содержащие числовые литералы . Также могут быть упрощены выражения, содержащие никогда не изменяемые переменные или переменные, объявленные как константы . Рассмотрим пример:

  i = 320 * 200 * 32;

Компилятор, поддерживающий свёртку констант, не будет генерировать две инструкции умножения и запись полученного результата. Вместо этого он распознает эту конструкцию как константное выражение и заменит её на вычисленное значение (в данном случае 2 048 000).

Распространение констант

Распространение констант оптимизация , заменяющее выражение, которое при выполнении всегда возвращает одну и ту же константу, самой этой константой . Это может быть константа, определённая ранее, или , применённая к константам. Рассмотрим следующий пример:

  int x = 14;
  int y = 7 - x / 2;
  return y * (28 / x + 2);

Распространение x возвращает:

  int x = 14;
  int y = 7 - 14 / 2;
  return y * (28 / 14 + 2);

Далее, свёртка констант и распространение y возвращают следующее (присваивания x и y , вероятно, в дальнейшем будут удалены оптимизацией удаления мёртвого кода ):

  int x = 14;
  int y = 0;
  return 0;

См. также

Примечания

  1. Практикум «Оптимизирующие компиляторы» (на примере GCC). — НГУ им. Лобачевского. — С. 100.
  2. , p. 362-370.
  3. , p. 760.

Литература

Ссылки

Источник —

Same as Свёртка констант