2015-12-13 2 views
8

Ich arbeite an einer neuen Sprache mit der LLVM C++ API und möchte die Vorteile der Optimierung nutzen. (Hinweis: ich zur Zeit bin mit der neuesten von der Quelle LLVM die ich glaube, entspricht 3.8)LLVM (3.5+) PassManager vs LegacyPassManager

Ich habe noch keine Beispiele finden, die die neue PassManager verwenden und sogar Clang nutzt noch die LegacyPassManager.

Ich bin auf Beiträge wie this, die mehrere Jahre alt sind, dass die Erwähnung der neuen PassManager, aber sie alle immer noch das Legacy-System.

Gibt es Beispiele/Tutorials zur Verwendung dieser neuen (ish) PassManager? Sollten neue LLVM-Projekte PassManager bis LegacyPassManager bevorzugen? Passt Clang auf die Migration oder ist das der Grund, warum das Legacy-System festgefahren ist?

+0

Ich kann den Plan nicht beantworten, aber LegacyPassManagers wird immer noch für die neuesten 3.8 Quellen vom 6. November verwendet. Ich würde erwarten, dass ein besserer Ort, um diese Frage zu stellen, die LLVM-Mailingliste sein würde, da dort die Leute, die LLVM entwickeln, "leben", und das sind die Leute, die die eigentlichen Pläne haben. [Ich erwarte die Antwort ist "ja, irgendwann"] –

+0

Bis jetzt sehe ich sehr ähnlich. Ich werde wahrscheinlich auf der Mailingliste Spaß machen, da ich eine ziemlich große Liste von Fragen gesammelt habe, jedoch finde ich, dass SO ein viel besseres Format zum Archivieren dieser Art von Fragen ist, um anderen später besser zu dienen. Als Entwickler bin ich wirklich sehr unzufrieden mit Mailinglisten-Suchergebnissen LOL. Man findet sie immer in Stücken und dann ist das> Antwortformat grauenhaft. Ich bin mir sicher, dass es ein Front-End gibt, das die Leute dazu neigen, diese Dinge zu sehen, aber normalerweise lande ich einfach von Google-Suchen darauf. –

+1

Fühlen Sie sich frei, eine Antwort auf Ihre Frage zu schreiben, wenn Sie eine bekommen ... Ich stimme zu, dass es oft einfacher ist, die Antworten auf SO zu lesen als an anderen Orten. Aber alle benutzen SO nicht, und Leute wie Chandler Carruth, der einer der Leute hinter dem neuen PassManager ist, sind ziemlich aktiv auf der LLVM-Mailingliste. –

Antwort

0

Von dem, was ich mit Hilfe der #llvm IRC gesammelt haben:

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); 

Aber die Mühe des manuell jeder passieren Registrierung vermeiden Sie PassBuilder verwenden können, um die Analyse zu registrieren gibt

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

FunctionAnalysisManager FAM; 

PassBuilder PB; 
PB.registerFunctionAnalyses(FAM); 

FPM.run(*myFunction, FAM);