Desventajas de la forma funcional intermedia

16

Estoy escribiendo un optimizador para un lenguaje similar a JavaScript, y necesito elegir una representación de código intermedio. La opción obvia / típica en estos días es la asignación única estática (SSA).

Sin embargo, la implementación del compilador moderno en C también analiza la forma intermedia funcional, lo que básicamente significa ser puramente funcional para la representación intermedia (pura solo en términos de variables locales, los datos del montón todavía son mutables y no CPS, solo letbloques directos y llamadas de cola) y tiene algunas ventajas en términos de ser más fácil de razonar.

Presumiblemente no es obvio o todos ya estarían usando tal representación, así que mi pregunta es, ¿qué desventajas tiene la forma intermedia funcional en comparación con la SSA?

rwallace
fuente
3
¿Qué tipo de análisis vas a hacer en esta forma intermedia? SSA es ideal para la eliminación de código muerto, propagación constante, especialización parcial y demás. Si este tipo de cosas no está en su menú, puede omitir SSA y usar una representación más relajada para pases de análisis más simples. Pero generar un formulario SSA es una tarea bastante trivial, y puede convertir fácilmente SSA en CPS (y viceversa), lo que duplica los beneficios.
SK-logic
Sí, estoy apuntando al monty completo, más o menos, y el lenguaje de entrada y el formato de salida (inicialmente C ++) son lenguajes imprescindibles.
rwallace
Generar un formulario SSA es una tarea bastante trivial, y puede convertir fácilmente SSA en CPS, también puede convertir CPS a SSA, lo que duplica los beneficios.
Leon Alexis Cardinal

Respuestas:

1

SSA es ideal para la eliminación de código muerto, propagación constante, especialización parcial y demás. Si este tipo de cosas no está en su menú, puede omitir SSA y usar una representación más relajada para pases de análisis más simples

Adromil Balais
fuente