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


16

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

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

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


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

Да, я стремлюсь к полной монти, и язык ввода и формат вывода (первоначально C ++) являются обязательными языками.
Rwallace

Создание формы SSA - довольно тривиальная задача, и вы можете легко конвертировать SSA в CPS, а также конвертировать CPS в SSA, что удваивает преимущества.
Леон Алексис Кардинал

Ответы:


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.