2012-02-01 4 views
7

Secondo this article gcc utilizza diversi formati intermedi prima di generare codice. Ho letto che il formato GIMPLE utilizza tre codici indirizzo, che sembra essere il linguaggio intermedio più facile da usare. Ma ho bisogno di ulteriori dettagli, in quanto ho bisogno di creare uno strumento che possa prendere il codice intermedio e inserire del codice prima di generare il codice finale.Giocare con il formato intermedio di gcc

Per questo ho prima bisogno di sapere come posso anche generare il codice di formato GIMPLE e salvarlo in un file. Quindi sto cercando alcuni documenti ed esempi. Inoltre, se qualcuno ha lavorato con queste cose, posso conoscere la complessità di questo compito, che è quello di inserire del codice nel codice intermedio?

+2

Questo è un collegamento, http://gcc.gnu.org/wiki/GimpleFrontEnd – MetallicPriest

+0

Un buon esempio è su http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gccint/GIMPLE-Example.html – MetallicPriest

+0

se stai cercando un modo per generare codice, potresti dare un'occhiata a llvm. Almeno è molto meglio documentato. –

risposta

13

Potresti trovare più semplice scrivere un plugin per GCC, che ti consentirebbe di agganciare la generazione di GIMPLE e di modificarlo all'interno di GCC, il che dovrebbe ridurre il tempo di inattività del salvataggio, la modifica e quindi il compilatore dal modulo GIMPLE. MELT è uno di questi plugin (sebbene offra modo più che semplicemente alterando le rappresentazioni di livello inferiore). C'è anche un bel PDF here sui plugin di modifica di GIMPLE.

Altrimenti, è possibile cercare here per informazioni su come funziona GIMPLE di GCC. In termini di Gimple scarico fuori:

È possibile richiedere di scaricare una rappresentazione C-simile del modulo Gimple con la bandiera -fdump-tree-Gimple.

+10

Sono lo sviluppatore principale di MELT, e ho aggiunto qualche giorno fa nuove diapositive tutorial su http://gcc-melt.org/GCC-MELT-HiPEAC2012.pdf (ci sono anche altre cose di http://gcc-melt.org/ ...) –

5

È possibile generare facilmente la rappresentazione GIMPLE di qualsiasi file utilizzando la flag -fdump-tree-gimple.

Se si desidera scrivere un plug-in, si potrebbe essere interessati a come funzionano i passaggi su GCC. Si può vedere l'output di ogni passaggio con le bandiere del modulo:

-fdump-<ir>-<passname> 

dove ir potrebbe essere:

  • tree: intraprocedurale passa Gimple
  • ipa: interprocedurale passa Gimple
  • rtl: Passaggi intraprocedurali su RTL

Utilizzare <passname> = all per vedere tutte le discariche, ad es. -fdump-ipa-all.

-1

Ho provato la bandiera -fdump-tree-gimple. Funziona solo per il linguaggio C/C++ e non per altri linguaggi come Java, Ada, Fortran e Objective-C)

+2

La domanda è codificata C. Quindi le altre lingue non hanno alcuna rilevanza. – Mysticial