2012-02-01 13 views
7

De acuerdo con this article gcc usa varios formatos intermedios antes de generar el código. Leí que el formato GIMPLE usa tres códigos de dirección, que parece ser el idioma intermedio más fácil de usar. Pero necesito más detalles, ya que necesito construir una herramienta que pueda tomar el código intermedio e insertarle algún código antes de generar el código final.Jugando con el formato intermedio de gcc

Para esto primero necesito saber cómo puedo generar el código de formato GIMPLE y guardarlo en un archivo. Así que estoy buscando algunos documentos y ejemplos. Además, si alguien ha trabajado con tales cosas, ¿puedo saber la complejidad de esta tarea, que es insertar algún código en el código intermedio?

+2

Este es un enlace, http://gcc.gnu.org/wiki/GimpleFrontEnd – MetallicPriest

+0

Un buen ejemplo es en http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gccint/GIMPLE-Example.html – MetallicPriest

+0

si está buscando una forma de generar código, puede consultar llvm. Al menos está mucho mejor documentado. –

Respuesta

13

Puede que le resulte más fácil escribir un plugin para GCC, que le permitiría enganchar la generación GIMPLE y modificarla dentro de GCC, lo que debería reducir el tiempo de inactividad de guardar, editar y luego compilar desde formulario GIMPLE. MELT es uno de esos complementos (aunque ofrece manera más que simplemente alterar las representaciones de nivel inferior). También hay un buen PDF here en GIMPLE que altera los complementos.

De lo contrario, puede buscar here para obtener información sobre cómo funciona GIMPLE de GCC. En términos de dumping Gimple a cabo:

Puede solicitar al volcar una representación similar a C de la forma Gimple con la bandera -fdump-árbol-Gimple.

+10

Soy el desarrollador principal de MELT, y he agregado hace unos días nuevas diapositivas de tutoriales en http://gcc-melt.org/GCC-MELT-HiPEAC2012.pdf (también hay otras cosas de http://gcc-melt.org/ ...) –

5

Puede generar fácilmente la representación GIMPLE de cualquier archivo usando la bandera -fdump-tree-gimple.

Si desea escribir un complemento, entonces podría estar interesado en cómo funcionan los pases en GCC. Se puede ver la salida de cada pase con banderas de la forma:

-fdump-<ir>-<passname> 

donde ir podrían ser:

  • tree: intraprocedimiento pasa Gimple
  • ipa: interprocedural pasa Gimple
  • rtl: Pases intraprocedurales en RTL

Usa <passname> = all para ver todos los vertederos, p. -fdump-ipa-all.

-1

Probé la bandera -fdump-tree-gimple. Funciona solo para el lenguaje C/C++, y no para otros lenguajes como Java, Ada, Fortran y Objective-C)

+2

La pregunta está etiquetada C. Por lo tanto, los otros idiomas no son relevantes. – Mysticial

Cuestiones relacionadas