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 let
bloques 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?
fuente
Respuestas:
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
fuente