IRILL - Research and Innovation on Free Software

20250408 - V8: from CFG to Sea of Nodes and back again


"20250408 - V8: from CFG to Sea of Nodes and back again"
by Darius Mercadier,
Download MP4 format

Sea of Nodes est une représentation intermédiaire utilisée dans certains compilateurs just-in-time, qui est censée offrir plus de flexibilité que les graphes de flot de contrôle. Les deux plus gros compilateurs utilisant cette représentation intermédiaire sont C2 dans HotSpot pour Java, et Turbofan dans V8 pour JavaScript. Dans cet exposé je présenterai Turbofan et en particulier les difficultés avec Sea of Nodes que nous avons eues, et qui nous ont conduit à conclure que Sea of Nodes n'est pas une représentation intermédiaire adaptée pour JavaScript. En comparaison avec un graph de flow de contrôle, nous trouvons Sea of Nodes est trop complexe, trop limitée et trop lente. Si le temps le permet, je présenterai notre nouveau compilateur, Turboshaft, qui utilise un graphe de flot de contrôle et une représentation très compacte, offrant des temps de compilation environ deux fois plus rapide que Turbofan, tout en simplifiant fortement le code du compilateur.