J'écris un optimiseur pour un langage similaire à JavaScript, et je dois choisir une représentation de code intermédiaire. De nos jours, le choix évident / typique est Static Single Assignment (SSA).
Cependant, la mise en œuvre du compilateur moderne en C discute également de la forme intermédiaire fonctionnelle, ce qui signifie essentiellement devenir purement fonctionnel pour la représentation intermédiaire (pure uniquement en termes de variables locales, les données de tas sont toujours modifiables, et non CPS, juste des let
blocs simples et des appels de queue) et présente certains avantages en termes de facilité de raisonnement.
Vraisemblablement, ce n'est pas une évidence ou tout le monde utiliserait déjà une telle représentation, alors ma question est, quels sont les inconvénients de la forme intermédiaire fonctionnelle par rapport à la SSA?
la source
Réponses:
SSA est idéal pour l'élimination de code mort, la propagation constante, la spécialisation partielle et autres. Si ce genre de choses n'est pas dans votre menu, vous pouvez ignorer SSA et utiliser une représentation plus détendue pour des passes d'analyse plus simples
la source