Лекция 01. Неоптимизирующий компилятор (1157459), страница 2
Текст из файла (страница 2)
Базовым блоком называется тройкаB = P, Input, Output ,где P последовательность инструкций,Input – множество переменных, определенных до входа в блок B,Output – множество переменных, используемых после выхода изблока B.231.6 Локальная оптимизация1.6.9 Удаление мертвого кодаПример. Рассмотрим базовый блок B = P, {a, b, c, d}, {a, b}аbсe+,-,+,+,b,b,c,b,а b + сb b - dсddcБазовый блок B доудаления мертвогокодаОАГ базового блока BБазовый блок B послеудаления мертвогокода241.7 Восстановление базового блока по его ОАГ1.7.1.
ПравилаДля каждого узла с одной или несколькими cвязанными переменнымистроится трехадресная инструкция, которая вычисляет значение однойиз этих переменных.Если у узла несколько присоединенных живых переменных, то следуетдобавить команды копирования, которые присвоят корректное значениекаждой из этих переменных.251.7 Восстановление базового блока по его ОАГ1.7.2. ПримерПусть ОАГ представлен следующим массивом записей.1b0ссылкав ТС2c0ссылкав ТС3d0ссылкав ТС4+12a5-43d, b6+52c8aссылкав ТС9bссылкав ТС10cссылкав ТС11dссылкав ТСПрименяя правила изп. 1.7.1, получим:Базовый блокB = P, Input, OutputP:а +, b0, с0d –, а, d0с +, d, с0b dInput = {b0, c0, d0}Output = {a, b, c, d}261.8 Локальная оптимизация. Заключительные замечания1.8.1.
Заключительные замечанияСтремление разработать полноценную локальную оптимизацию привело кнеобходимости построить связи по данным оптимизируемого базовогоблока с другими базовыми блоками, т.е. к необходимости глобальногоанализа оптимизируемой процедуры (функции, метода).Необходимо научиться строить базовые блоки больших размеров, чтобыповысить эффективность локальной оптимизации.Ссылаться на базовые блоки по их идентификаторам неудобно.Необходимо научиться нумеровать базовые блоки, чтобы их можно былоназывать B1, B2 и т.д. Решение этой задачи связано с обходом ГПУ.Далее будут рассмотрены методы решения перечисленных задач инекоторых других задач, которые будут возникать по ходу дела.27.