Использование анализа псевдонимов и отслеживание хранилищ кучи - PullRequest
0 голосов
/ 25 апреля 2019

В настоящее время я работаю через nand2tetris для университетского курса и подумал, что было бы интересно добавить некоторые оптимизации.Для стека vm это в основном включало отображение вершины стека в регистр, отображение слотов стека, которые не используются при обращениях к постоянной памяти, и специализацию инструкций с известными входами, чтобы избежать ненужных манипуляций со стеком.Изначально я добавил одну специализацию слишком поздно, поэтому x = x + 1 в итоге

push 1
push x
add
pop x


store temp
load x
inc
store x
load temp

store temp
inc x
load temp

inc x понижается до @x; M = M + 1, что не перезаписывает регистр D, поэтому сохранение / загрузка не нужны.

Время вопроса: Как настоящий компилятор может оптимизировать этот тип ненужного сохранения / загрузки в общих настройках?Моя интуиция говорит что-то вроде:

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

Я нашел много о возможных реализациях для этого анализа, но очень мало о том, как использовать полученные данные.Можно ли проводить такого рода оптимизацию в изолированных проходах или для этого требуется какая-то специализированная гибридная версия нескольких алгоритмов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...