2015-12-13 36 views
8

Pracuję nad nowym językiem przy użyciu API LLVM C++ i chciałbym skorzystać z optymalizacji przepustek. (Uwaga: obecnie używam najpóźniej od źródła LLVM które wierzę równa się 3,8)LLVM (3.5+) PassManager vs LegacyPassManager

jeszcze muszę znaleźć jakieś przykłady, które wykorzystują nową PassManager a nawet Clang nadal wykorzystując LegacyPassManager.

Natknąłem się na takie posty, jak this, które mają już kilka lat, ale wspominają o nowym PassManager, ale wszystkie nadal korzystają z dotychczasowego systemu.

Czy są jakieś przykłady/samouczki dotyczące korzystania z tego nowego (ish) PassManager? Czy nowe projekty LLVM powinny preferować PassManager na LegacyPassManager? Czy planuje migrować Clang, czy też dlatego system Legacy utknął w pobliżu?

+0

Nie można odpowiedzieć na temat planu, ale LegacyPassManagers jest nadal używany do najnowszych źródeł 3.8 od 6 listopada. Spodziewałbym się, że lepszym miejscem do zadawania tego pytania będzie lista dyskusyjna LLVM, ponieważ ludzie, którzy faktycznie tworzą LLVM, "żyją", a są to ludzie, którzy mają rzeczywiste plany. [Oczekuję, że odpowiedź brzmi "tak, ostatecznie"] –

+0

Do tej pory widzę bardzo podobnie. Prawdopodobnie dołączę do listy mailingowej, ponieważ zebrałem dość dużą listę pytań, jednak uważam, że SO jest znacznie lepszym formatem do archiwizowania tego rodzaju pytań, aby lepiej służyć innym później. Jako programista jestem bardzo niezadowolony z wyników wyszukiwania listy adresowej LOL. Zawsze starasz się je znaleźć w kawałkach, a format> odpowiedzi jest okropny. Jestem pewien, że ludzie z frontonu zazwyczaj oglądają te rzeczy, ale zwykle ląduję na nich z wyszukiwań w Google. –

+1

Możesz napisać odpowiedź na swoje pytanie, gdy ją otrzymasz ... Zgadzam się, że często jest łatwiej przeczytać odpowiedzi na SO niż w innych miejscach. Ale wszyscy nie używają SO, a ludzie tacy jak Chandler Carruth, który jest jednym z ludzi stojących za nowym menedżerem PassManager, są całkiem aktywni na liście mailingowej LLVM. –

Odpowiedz

0

Z tego co ja zebrane z pomocą 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); 

Jednak aby uniknąć kłopotów z ręcznie rejestracji każdym przejściu można użyć PassBuilder zarejestrować analizy przechodzi

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

FunctionAnalysisManager FAM; 

PassBuilder PB; 
PB.registerFunctionAnalyses(FAM); 

FPM.run(*myFunction, FAM);