Курс "разработка оптимизирующих компиляторов" 2020 г.

Здесь выложены презентации лекций

https://drive.google.com/open?id=127Dj3_lesQxzR_1TgBZtKZEX8gE-nLcQ

2 лайка

Подскажите, пожалуйста, в итеративном алгоритме распространения констант для получения всех переменных программы можно использовать уже имеющийся список объявленных переменных, который был в ParserHelper.cs в заготовке, которую вы дали нам в начале семестра или обязательно самому его находить по графу потока управления? Просто это немного сократило бы код

Я уже не помню, что было в ParserHelper.cs

Думаю, следует написать самим.

Здравствуйте, Станислав Станиславович.

Сейчас наш оптимизатор по трёхадресному коду принимает список инструкций TAC, к которым он применяет все локальные и глобальные оптимизации. Мы написали построение графа потока управления, в котором выкидываются недостижимые базовые блоки. Поэтому теперь хотим поменять применение оптимизаций по TAC на следующее: сначала мы строим граф потока управления (на этом этапе возможно выкидывается часть недостижимого кода, которая была в исходной программе), затем из построенного графа мы извлекаем список инструкций и запускаем оптимизатор на этом, и плюс к этому мы перестраиваем CFG после того, как были произведены все оптимизации, так как глобальные оптимизации могут создать недостижимый код.

Скажите, вы нам не забракуете такую схему работы? Всё же у нас граф потока управления был позже оптимизаций по трёхадресному коду, и у людей есть сомнения, что так почему-то может быть нельзя.

Не забракую конечно. А когда ББл недостижим?

Когда у нас есть бесконечные циклы в исходной программе и нет пути из цикла, ну или просто безусловные прыжки, которые пропускают код, в который тоже нет пути. На этих бблоках не хотелось бы запускать никакие оптимизации, поэтому они и выкидываются из графа потока управления.

А если говорить про создание недостижимых бблоков оптимизациями, то как минимум устранение перехода к переходу у нас оставляет одну строчку, к которой никак не попасть.

Ясно. Будет здорово если сделаете

Здравствуйте, Станислав Станиславович.

Если задание было сформулировано как “Итерационный алгоритм в структуре распространения констант”, то оно включает в себя реализацию только итерационного алгоритма с вычисление IN-OUT без проведения собственно оптимизации?

Да, без оптимизации. По идее оптимизацией должны заниматься те, кто делал её в ББл. Они даолжны воспользоваться вашим IN[b] и протянуть все эти константы в блок