2015-12-13 19 views
8

Sto lavorando su una nuova lingua utilizzando l'API LLVM C++ e vorrei sfruttare i passaggi di ottimizzazione. (Nota: Attualmente sto usando le ultime dal LLVM fonte che credo equivale a 3,8)LLVM (3.5+) PassManager vs LegacyPassManager

devo ancora trovare esempi che utilizzano la nuova PassManager e anche Clang sta ancora utilizzando il LegacyPassManager.

Mi sono imbattuto in post come this che hanno diversi anni ora che menzionano il nuovo PassManager, ma tutti usano ancora il sistema legacy.

Esiste qualche esempio/tutorial su come utilizzare questo nuovo (ish) PassManager? I nuovi progetti LLVM dovrebbero preferire PassManager a LegacyPassManager? Clang pianifica la migrazione o è per questo che il sistema Legacy si è bloccato?

+0

Impossibile rispondere al piano, ma LegacyPassManagers è ancora in uso per le ultime 3,8 fonti del 6 novembre. Mi aspetterei che un posto migliore per porre questa domanda sia la mailing list LLVM, poiché è lì che la gente che sta effettivamente sviluppando LLVM "vive", e quelle sono le persone che hanno i piani reali. [Mi aspetto che la risposta sia "sì, alla fine"] –

+0

Finora vedo lo stesso. Probabilmente parteciperò alla mailing list in modo divertente, dal momento che ho raccolto una lista piuttosto ampia di domande, tuttavia, trovo che SO sia un formato molto migliore per archiviare questo tipo di domande per servire meglio gli altri in seguito. Come sviluppatore sono in realtà molto insoddisfatto dei risultati di ricerca della mailing list LOL. Tendi sempre a trovarli a pezzi e quindi il> formato di risposta è atroce. Sono sicuro che ci sia un front-end che tende a vedere quelle cose, ma di solito mi atterrano su di esse da ricerche su google. –

+1

Sentiti libero di scrivere una risposta alla tua domanda quando ne ottieni una ... Sono d'accordo sul fatto che spesso è più facile leggere le risposte su SO rispetto ad altri posti. Ma tutti non usano SO, e gente come Chandler Carruth che è una delle persone dietro il nuovo PassManager è piuttosto attiva sulla mailing list LLVM. –

risposta

0

Da quello che ho raccolto con l'aiuto del IRC#llvm:

FunctionPassManager FPM; 
//Use the PassInfoMixin types 
FPM.addPass(InstCombinePass()); 

//Register any analysis passes that the transform passes might need 
FunctionAnalysisManager FAM; 

//Use the AnalysisInfoMixin types 
FAM.registerPass([&] { return AssumptionAnalysis(); }); 
FAM.registerPass([&] { return DominatorTreeAnalysis(); }); 
FAM.registerPass([&] { return BasicAA(); }); 
FAM.registerPass([&] { return TargetLibraryAnalysis(); }); 

FPM.run(*myFunction, FAM); 

Ma per evitare il fastidio di registrazione manualmente ogni passo si può usare PassBuilder per registrare l'analisi passa

FunctionPassManager FPM; 
FPM.addPass(InstCombinePass()); 

FunctionAnalysisManager FAM; 

PassBuilder PB; 
PB.registerFunctionAnalyses(FAM); 

FPM.run(*myFunction, FAM);