Исключение недостижимого кода

Исключение недостижимого кода – оптимизация в компиляторах, исключающая части кода, которые не могут быть достигнуты при ее выполнении. Можно выделить несколько случаев для применения оптимизации:

  • исключение функций, не вызывающихся ни в одной части программы;

  • удаление неиспользуемых локальных переменных;

  • исключение ложных условных переходов;

  • исключение циклов, содержащих ложное правило выхода;

  • исключение кода после ключевого слова return;

  • исключение кода после циклов, содержащих всегда истинное правило выхода.

Пример на уровне кода

Рассмотрим пример исключения функций.

До оптимизации:

def deadCode() -> None:
    x: int = 1

def main() -> None:
    x: int = 1
         y: float = 2 + x

После оптимизации:

def main() -> None:
    x: int = 1
         y: float = 2 + x

Для реализации оптимизации в каждой записи в таблице функций было добавлено поле контролирующие количество использований функции. При анализе синтаксического дерева счетчик вызовов функции увеличивается. Если после прохода по дереву нашлись функции, которые никогда не вызываются, то они удаляются из дерева.

Назад