2014-04-17 7 views
6

Ho scritto alcuni passaggi per llvm, per usarli con clang.LLVM - Esegui il proprio passaggio automaticamente con clang

Li ho integrati in llvm (non caricato dinamicamente). Essi sono anche elencati nelle Ottimizzazioni disponibili: sezione quando si digita:

opt --help-hidden 

Voglio correre una delle propria miei passaggi ora automaticamente come ultimo quando chiamo clang:

clang ./hello.bc -o ./hello 

o anche con c-code:

clang ./hello.c -o ./hello 

Quando eseguo il mio pass con opt manualmente, il Byte modificato Codice viene generato e scritto in un nuovo file .BC:

opt -my-pass <./hello.bc> ./hello_optimized.bc 

Quando ho compilare il modificato .BC con clang, clang normali ottimizzazioni vengono eseguiti ancora una volta, che distruggono le ottimizzazioni del mio manuale passaggio eseguito:

clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized 

mia domanda è:

  • come posso eseguire automaticamente il mio passaggio scritto con clangore come l'ultimo passo di tutti?
  • Un'altra soluzione possibile è la disattivazione di tutti i passaggi completamente, o almeno il codice/l'eliminazione di clang/opt. Come potrei farlo?
+0

Usa clang -flto, e superare la sequenza di passaggi al plugin oro lto. –

risposta

1

Il modo corretto per farlo sarebbe quello di fare clang aggiungere il pass al gestore di passate che crea. Vedi clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses() per come viene gestito per i disinfettanti.

0

È possibile eseguire il proprio passaggio con clang direttamente con -Xclang.

clang++ -Xclang -load -Xclang ./libmypass.so input.cpp 

Source