squalyl> Hé, si j'ai bien compris ce que tu dis, c'est à peu près ce que j'ai fait (enfin, en C++, donc un vector d'instructions polymorphiques dont certaines d'entre elles sont des labels, mais ce serait effectivement plus malin de les séparer

)
Mais ta méthode nécessite elle aussi de passer n fois la liste des instructions en revue n'est-ce pas?
Perso la première fois les labels pointent à zéro, donc le code généré sera peut être minimal, peut être pas, tout dépend. Ensuite ils seront ajustés et au deuxième passage on pourra générer un code "correct". Enfin, pas complètement, étant donné que certaines instructions utilisent peut-être des labels "en avant" qui n'ont pas encore été mis à jour. Donc il faudra un troisième passage pour vérifier que tout est cohérent. Si quelque chose change à ce passage, il faut refaire tout, étant donné que les références vers les labels "en avant" ne sont plus valides. En gros on le refait tant qu'il y a du changement, et ça implique qu'à chaque passe la taille du code devrait soit toujours diminuer, soit toujours augmenter, sinon on pourrait avoir des blocages, comme mon cas plus haut.
A part ça la méthode d'optimisation à Kevin me semble plus propre, même si j'ai de la peine à voir la différence à l'implémentation, étant donné qu'une optimisation va nécessiter de tout regénérer à chaque fois, et ensuite éventuellement permettre une nouvelle optimisation non?