Недостатки функциональной промежуточной формы

16

Я пишу оптимизатор для языка, похожего на JavaScript, и мне нужно выбрать промежуточное представление кода. Очевидный / типичный выбор в эти дни - статическое одиночное назначение (SSA).

Однако в современной реализации компилятора на C также обсуждается функциональная промежуточная форма, что в основном означает использование чисто функционального для промежуточного представления (чисто с точки зрения только локальных переменных, данные кучи по-прежнему изменяемы, а не CPS, только простые letблоки и хвостовые вызовы) и имеет некоторые преимущества с точки зрения того, что легче рассуждать.

Предположительно, это не просто, или все уже использовали бы такое представление, поэтому мой вопрос, какие недостатки имеет функциональная промежуточная форма по сравнению с SSA?

rwallace
источник
3
Какой анализ вы собираетесь провести на этой промежуточной форме? SSA отлично подходит для устранения мертвого кода, постоянного распространения, частичной специализации и тому подобного. Если такого рода вещи нет в вашем меню, вы можете пропустить SSA и использовать более упрощенное представление для более простых проходов анализа. Но создание формы SSA - довольно тривиальная задача, и вы можете легко конвертировать SSA в CPS (и наоборот), что удваивает преимущества.
SK-logic
Да, я стремлюсь к полной монти, и язык ввода и формат вывода (первоначально C ++) являются обязательными языками.
Rwallace
Создание формы SSA - довольно тривиальная задача, и вы можете легко конвертировать SSA в CPS, а также конвертировать CPS в SSA, что удваивает преимущества.
Леон Алексис Кардинал

Ответы:

1

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

Адромиль Бале
источник