Inconvénients de la forme intermédiaire fonctionnelle


16

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 letblocs 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?


3
Quel type d'analyse allez-vous faire sur cette forme intermédiaire? 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. Mais, générer un formulaire SSA est une tâche assez triviale, et vous pouvez facilement convertir SSA en CPS (et vice versa), ce qui double les avantages.
SK-logic

Oui, je vise le mois complet, à peu près, et le langage d'entrée et le format de sortie (initialement C ++) sont tous deux des langages impératifs.
rwallace

La génération d'un formulaire SSA est une tâche assez triviale, et vous pouvez facilement convertir SSA en CPS, vous pouvez également convertir CPS en SSA, ce qui double les avantages.
Leon Alexis Cardinal

Réponses:


1

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.