Инверсия цикла (Nufyjvnx entlg)

Перейти к навигации Перейти к поиску

Инверсия цикла (англ. Loop inversion) — оптимизация компилятора и трансформация цикла, в ходе которой While-цикл[англ.] заменяется на оператор ветвления, содержащий Do-While-цикл[англ.]. При правильном использовании данная оптимизация повышает производительность за счет конвейеризации.

Пример на С

[править | править код]

Например, следующий код:

  int i, a[100];
  i = 0;
  while (i < 100) {
    a[i] = 0;
    i++;
  }

в результате применения оптимизации преобразовывается в:

  int i, a[100];
  i = 0;
  if (i < 100) {
    do {
      a[i] = 0;
      i++;
    } while (i < 100);
  }

Примечания

[править | править код]

Литература

[править | править код]
  • Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструментарий = Compilers: Principles, Techniques, and Tools. — 2-е издание. — М.: «Вильямс», 2008. — 1184 с. — 1500 экз. — ISBN 978-5-8459-1349-4.
  • Steven S. Muchnick. Advanced Compiler Design and Implementation. — 5-е издание. — San Francisco: Morgan Kaufmann Publishers, 1997. — 856 с. — ISBN 1-55860-320-4.
  • Kennedy, Ken; & Allen, Randy. Optimizing Compilers for Modern Architectures: A Dependence-based Approach (англ.). — Morgan Kaufmann, 2001. — ISBN 1-55860-286-0.