2012-01-08 8 views
14

Estoy aprendiendo programación de backends LLVM.ejemplos de código para aprender la programación back-end de LLVM

Actualmente estoy interesado en pases de análisis, transformaciones de programas posteriores. (Asumo que como voy a ser más fluido con el análisis, entonces será el momento de las transformaciones del programa).

¿Podría recomendar recursos para aprender? (Sé el manual de programadores de LLVM y Dragon Book;)).

Por recursos quiero decir no solo tutoriales, libros, sino especialmente pequeños proyectos bien escritos. Me gustaría leer ejemplos de código, compilarlos y jugar con ellos (hackear un poco) para obtener más información sobre la implementación práctica.

Esos códigos no tienen que estar restringidos a la parte de análisis. El tema es la programación backend de LLVM en general, mientras que el análisis y las transformaciones de programas son muy interesantes.

+1

Ligeramente tangente: al utilizar la página [Try'll LLVM] (http://llvm.org/demo/index.cgi), puede solicitarse generar la fuente LLVM C++ API equivalente que habría generado el IR. Puede ser útil (o no) al buscar una traducción en particular. –

Respuesta

2

Todas las transformaciones de LLVM están organizadas como pases independientes dentro de lib/Transforms dir. Puede leer sus fuentes y ejecutar cualquier pase arbitrario en su código usando la herramienta opt.

Además, hay un buen tutorial sobre cómo escribir su propio pase y usarlo como módulo cargable sin volver a compilar LLVM completo.

Por lo tanto, ya hay un patio bastante amplio.

+2

** He pedido algo más que la documentación en sí y la fuente de llvm. Especialmente, he escrito sobre proyectos pequeños (incluso juguetes, ejemplos de pirateo de LLVM) **. He insistido sobre el conocimiento de [manual de LLVM] (http://llvm.org/docs/), que incluye: [LLVM doxygen mencionado en la parte de "Programación"] (http://llvm.org/doxygen/) acerca de programación fuera de la fuente tres en [LLVM CMake guide] (http://llvm.org/docs/CMake.html#passdev), ... Hay mucha documentación y se puede obtener una buena visión general del proyecto. Sin embargo, en muchos aspectos la documentación apesta, por lo que hay dudas sobre algo más. –

+1

Como mencionas sobre la documentación y * "sin volver a compilar LLVM completo" *, he querido informarte sobre cómo hacer pases fuera del árbol de fuentes: [Construir LLVM con CMake: Desarrollar LLVM pasar fuera de la fuente] (http : //llvm.org/docs/CMake.html#passdev) –

+1

Está bien, está bien, disculpe la respuesta irrelevante. En cuanto a desarrollar el paso de árbol, esta característica fue desarrollada por mí, lol. – arrowd

1

Como alguien que hizo lo que quiere hacer hace 3 años: La base de código LLVM tiene los mejores ejemplos. Tal vez un buen lugar para comenzar es el análisis dominator, como está bien descrito en los libros de compilación.

Comprobar cómo se hace en LLVM: http://llvm.org/doxygen/Dominators_8h_source.html

Otro lugar para buscar podría ser la planificación de instrucciones.

1

que estaba buscando algo similar, el código que utiliza las bibliotecas llvm, y después de una larga sesión en Google acabo de encontrar en la página web llvm en "proyectos llvm": http://llvm.org/ProjectsWithLLVM/

sólo tiene que descargar lo considere útil para usted y jugar a lo largo.

Cuestiones relacionadas