2015-12-13 25 views
8

LLVM C++ API kullanarak yeni bir dil üzerinde çalışıyorum ve optimizasyon geçişlerinden yararlanmak istiyorum. (Not: Şu anda ben 3.8 eşittir inanıyoruz kaynak LLVM en son kullanıyorum) yeni PassManager kullanmak ve hatta Clang hala LegacyPassManager kullanan herhangi örnekler bulmakLLVM (3.5+) PassManager vs LegacyPassManager

ben henüz.

Yeni PassManager'dan söz eden this gibi bazı yayınlara rastladım, ancak bunların hepsi eski sistemi kullanıyor.

Bu yeni (ish) PassManager'u nasıl kullanacağınızla ilgili örnekler/eğiticiler var mı? Yeni LLVM projeleri PassManager'u LegacyPassManager olarak mı seçmeli? Clang göç ​​etmeyi planlıyor mu, yoksa bu miras sistemi neden bu yana sıkışmış? Ben #llvm IRC yardımıyla toplanan kadarıyla

+0

geçer Plana cevap veremem ama LegacyPassManagers hala 6 Kasım'dan itibaren en son 3.8 kaynak için kullanılıyor. Bu soruyu sormak için daha iyi bir yer olmasını beklerdim. LLVM posta listesi, insanların gerçekten LLVM'yi "yaşadığı" ve gerçek planlara sahip insanlar olduğu gibi. [Cevabın “evet, nihayetinde” olduğunu tahmin ediyorum] –

+0

Şimdiye kadar aynı şeyi görüyorum. Oldukça geniş bir soru listesi topladığım için posta listeleme eğlencesine katılacağım, ancak SO'nun bu tür soruları daha sonra daha iyi sunabilmek için daha iyi bir format olduğunu düşünüyorum. Bir geliştirici olarak ben gerçekten posta listesi arama sonuçları LOL ile çok memnun değilim. Her zaman onları parçalar halinde bulmaya eğilimliydin ve sonra cevap formatı iğrenç. Eminim, bu şeyleri görmeye eğilimli bir ön uç insan var, ama normalde sadece Google aramalarından onlara ulaşıyorum. –

+1

Sorularınızla ilgili sorularınız için yanıt yazarken çekinmeyin ... Cevapları diğer yerlere göre okumak daha kolay olur. Ama herkes SO kullanmıyor ve yeni PassManager'ın arkasındaki kişilerden biri olan Chandler Carruth gibi insanlar LLVM posta listesinde oldukça aktif. –

cevap

0

:

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

Ama elle her kayıt güçlük önlemek Eğer analiz kaydetmek için PassBuilder kullanabilirsiniz geçmesi

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

FunctionAnalysisManager FAM; 

PassBuilder PB; 
PB.registerFunctionAnalyses(FAM); 

FPM.run(*myFunction, FAM);