Wady funkcjonalnej formy pośredniej

16

Piszę optymalizator dla języka podobnego do JavaScript i muszę wybrać reprezentację kodu pośredniego. Oczywistym / typowym wyborem w dzisiejszych czasach jest Static Single Assignment (SSA).

Jednak implementacja nowoczesnego kompilatora w C omawia również funkcjonalną formę pośrednią, co w zasadzie oznacza przejście na czystą funkcjonalność dla reprezentacji pośredniej (czysto pod względem tylko zmiennych lokalnych, dane sterty są nadal zmienne, a nie CPS, tylko proste letbloki i wywołania ogona) i ma pewne zalety, ponieważ jest łatwiejszy do uzasadnienia.

Przypuszczalnie nie jest to oczywiste lub wszyscy już używaliby takiej reprezentacji, więc moje pytanie brzmi: jakie wady ma funkcjonalna forma pośrednia w porównaniu do SSA?

rwallace
źródło
3
Jakiego rodzaju analizę przeprowadzisz na tej formie pośredniej? SSA doskonale nadaje się do eliminacji martwego kodu, ciągłej propagacji, częściowej specjalizacji i tym podobnych. Jeśli tego rodzaju rzeczy nie ma w twoim menu, możesz pominąć SSA i użyć bardziej zrelaksowanej reprezentacji dla łatwiejszych przebiegów analizy. Ale generowanie formularza SSA jest dość trywialnym zadaniem i można łatwo przekonwertować SSA na CPS (i odwrotnie), co podwaja korzyści.
SK-logic
Tak, właściwie dążę do pełnego monty, a język wejściowy i format wyjściowy (początkowo C ++) są językami imperatywnymi.
rwallace
Generowanie formularza SSA jest dość trywialnym zadaniem i możesz łatwo przekonwertować SSA na CPS, a także możesz przekonwertować CPS na SSA, co podwaja korzyści.
Leon Alexis Cardinal

Odpowiedzi:

1

SSA doskonale nadaje się do eliminacji martwego kodu, ciągłej propagacji, częściowej specjalizacji i tym podobnych. Jeśli tego rodzaju rzeczy nie ma w twoim menu, możesz pominąć SSA i użyć bardziej zrelaksowanej reprezentacji dla łatwiejszych przebiegów analizy

Adromil Balais
źródło