2012-11-29 5 views
12

Ora stiamo implementando un pass di analisi per llvm, successivo a this tutorial. e la necessità di superare un ulteriore argomento per il plugin, come di seguito:È possibile aggiungere argomenti per passaggi definiti dall'utente in llvm

opt -load /path/to/myplugin.so -mypass -mypass_option input.bc 

Tuttavia non ho trovato alcun manuale di dirmi come fare. Quindi mi chiedo se sia possibile nella pratica.

Grazie in anticipo.

+0

Questo particolare esempio non è ottimale perché l'idioma è quello di leggere da 'stdin'. Presumibilmente hai in mente un altro caso d'uso? –

+0

Che tipo di argomento hai bisogno? Per quanto ne so, un passaggio dovrebbe prendere di nuovo tutto ciò di cui ha bisogno dall'IR e emettere nuovamente IR. –

+0

@TobiasLangner È un argomento come il livello di analisi o la posizione di analisi del passaggio '-mypass'. Forse è come il livello di ottimizzazione gcc '-O1',' -O2', ecc. –

risposta

9

È necessario utilizzare la libreria CommandLine fornita con LLVM. In pratica, basta mettere nella parte superiore del file cpp del passo:

#include "llvm/Support/CommandLine.h" 

static cl::opt<string> InputFilename("mypass_option", cl::desc("Specify input filename for mypass"), cl::value_desc("filename")); 

Ma vi consiglio di controllare il link qui sopra, E 'comoda sezione QuickStart riferimento completo +.

Per un esempio, dare un'occhiata alla built-in loop unrolling pass - definisce due unsigned e due opzioni booleane, a destra nella parte superiore del file di origine, utilizzando cl::opt<unsigned> e .