He estado jugando con LLVM de forma intermitente durante muchos meses. Escribí dos artículos OCaml Journal que cubren el uso de LLVM del lenguaje de programación OCaml. Esto es particularmente interesante porque el lenguaje OCaml es ideal para escribir compiladores y tiene una gran cantidad de herramientas y bibliotecas potentes y maduras para analizar y demás.
En general, mi experiencia ha sido extremadamente positiva. LLVM hace lo que dice en la lata y es muy fácil de usar. El rendimiento del código generado es excelente. Uno de los programas que escribí fue un simple pequeño compilador Brainf * ck que genera algunos de los ejecutables más rápidos de cualquier compilador que probé (incluido GCC).
Tengo solo dos quejas con LLVM. En primer lugar, usa abort() cada vez que algo sale mal en lugar de generar una excepción. Esta fue una decisión de diseño deliberada de sus autores que intentan eliminar todos los usos de excepciones de LLVM, pero hace que sea imposible obtener retrocesos de OCaml cuando se intenta depurar un compilador que usa LLVM: su programa simplemente muere con una explicación textual de LLVM pero no hay ninguna pista sobre dónde ocurrió el error en su fuente. En segundo lugar, la biblioteca compilada de LLVM es monstruosamente grande (20Mb). Supongo que esto se debe a la hinchazón en la que incurre C++, pero hace que la compilación sea muy lenta.
EDIT: Mi trabajo en LLVM culminó en la creación de una máquina virtual recolectada de basura de alto rendimiento de alto nivel. Descarga gratuita here y echa un vistazo a la correspondiente benchmarks (wow!). @Alex: Voy a obtener ese compilador de BF en algún lugar lo antes posible.
He escrito el siguiente documento en el que se analizan los beneficios de LLVM. http://llvm4eclipsecdt.googlecode.com/files/Benefits%20of%20the%20LLVM%20compiler%20infrastructure.pdf –