Possiedo un ModulePass che funziona con lo strumento opt, ma non riesco a capire come renderlo disponibile per clangare sulla riga di comando. Il mio attuale flusso di lavoro per utilizzare il mio pass è:Creare un ModulePass LLVM sulla riga di comando clang
- Clang [file di codice c-source] -c -emit-LLVM
- [file] LLVM codice binario che LLVM-link
- opt-load [PassName]. così - [nome pass-] [file LLVM collegato]
- LLC [file risultante codice binario che]
- gcc [file di assembler risultante] -o [destinazione]
Vorrei ottenere il mio pass integrato con il comando clang linea in modo che possa essere invocato come parte della build del software esistente (ad es. libreria standard C++) senza dover rifare l'intero sistema di compilazione per ogni cosa che compilo. Ho visto suggerimenti su come farlo, ma non sono riuscito a mettere insieme i pezzi in una configurazione funzionante.
Run an LLVM Pass Automatically with Clang descrive esattamente quello che voglio, ma il metodo sembra essere deprecato in LLVM 3.4 (PassManagerBuilder è stato spostato nello spazio dei nomi legacy).
LLVM - Run Own Pass automatically with clang sembra affrontare il problema di base, ma speravo di poterlo fare senza dover modificare clang (che sembra essere quello che viene suggerito lì).
Qual è il modo migliore per rendere disponibile un nuovo passaggio da clang utilizzando LLVM 3.4?
Grazie per la risposta, continuerò con l'installazione PassManagerBuilder quindi. – Erik
Funziona su llvm-3.7. Una nota per la registrazione di ModulePass: cambia '' EP_EarlyAsPossible'' in '' EP_ModuleOptimizerEarly'' altrimenti Lvm potrebbe trattarlo come un FunctionPass e provare a richiamare '' runOnFunction''. – xywang