Я пишу оптимизатор для языка, похожего на JavaScript, и мне нужно выбрать промежуточное представление кода. Очевидный / типичный выбор в эти дни - статическое одиночное назначение (SSA).
Однако в современной реализации компилятора на C также обсуждается функциональная промежуточная форма, что в основном означает использование чисто функционального для промежуточного представления (чисто с точки зрения только локальных переменных, данные кучи по-прежнему изменяемы, а не CPS, только простые let
блоки и хвостовые вызовы) и имеет некоторые преимущества с точки зрения того, что легче рассуждать.
Предположительно, это не просто, или все уже использовали бы такое представление, поэтому мой вопрос, какие недостатки имеет функциональная промежуточная форма по сравнению с SSA?
источник
Ответы:
SSA отлично подходит для устранения мертвого кода, постоянного распространения, частичной специализации и тому подобного. Если такого типа нет в вашем меню, вы можете пропустить SSA и использовать более упрощенное представление для более простых проходов анализа.
источник