J'ai joué avec LLVM de façon intermittente pendant de nombreux mois maintenant. J'ai écrit deux articles du Journal OCaml couvrant l'utilisation de LLVM à partir du langage de programmation OCaml. C'est particulièrement intéressant car le langage OCaml est idéal pour écrire des compilateurs et dispose d'une multitude d'outils et de bibliothèques puissants et matures pour le parsing, et cetera.
Globalement, mon expérience a été extrêmement positive. LLVM fait ce qu'il promet et est très facile à utiliser. Les performances du code généré sont superbes. L'un des programmes que j'ai écrit était un simple petit compilateur Brainf*ck qui génère quelques-uns des exécutables les plus rapides de tous les compilateurs que j'ai testés (y compris GCC).
Je n'ai que deux reproches à faire à LLVM. Tout d'abord, il utilise abort() chaque fois que quelque chose ne va pas au lieu de lever une exception. Il s'agit d'une décision de conception délibérée de ses auteurs, qui s'efforcent de supprimer toutes les utilisations d'exceptions de LLVM, mais cela rend impossible d'obtenir des traces de pile en OCaml lors du débogage d'un compilateur qui utilise LLVM : votre programme meurt simplement avec une explication textuelle de la part de LLVM mais sans aucune indication de l'endroit où l'erreur s'est produite dans votre code source. Deuxièmement, la bibliothèque compilée de LLVM est monstrueusement grande (20 Mo). Je suppose que cela est dû au gonflement causé par le C++, mais cela rend la compilation extrêmement lente.
ÉDIT : Mon travail sur LLVM a abouti à la création d'une machine virtuelle haute performance, haut niveau, et traitée par un système de gestion des déchets. Téléchargement gratuit ici et consultez les benchmarks correspondants (wow!). @Alex: je vais mettre ce compilateur BF en ligne pour vous dès que possible.