2015-12-13 13 views
8

Tôi đang làm việc trên một ngôn ngữ mới sử dụng API LLVM C++ và muốn tận dụng lợi thế của các tối ưu hóa. (Lưu ý: Tôi hiện đang sử dụng mới nhất từ ​​nguồn LLVM mà tôi tin rằng tương đương với 3.8)LLVM (3.5+) PassManager vs LegacyPassManager

tôi vẫn chưa tìm thấy bất kỳ ví dụ sử dụng mới PassManager và thậm chí Clang vẫn sử dụng các LegacyPassManager.

Tôi đã xem các bài đăng như this đã vài năm nay đề cập đến PassManager mới, nhưng tất cả họ vẫn sử dụng hệ thống cũ.

Có bất kỳ ví dụ/hướng dẫn nào về cách sử dụng mới này (ish) PassManager không? Các dự án LLVM mới có thích PassManager đến LegacyPassManager không? Có Clang kế hoạch di chuyển hay đây là lý do tại sao hệ thống cũ đã bị kẹt lại?

+0

Không thể trả lời như kế hoạch, nhưng LegacyPassManagers vẫn đang được sử dụng cho các nguồn 3,8 mới nhất từ ​​ngày 6 tháng 11. Tôi hy vọng một nơi tốt hơn để đặt câu hỏi này sẽ là danh sách gửi thư của LLVM, vì đó là nơi mọi người thực sự phát triển LLVM "sống", và đó là những người có kế hoạch thực tế. [Tôi hy vọng câu trả lời là "có, cuối cùng"] –

+0

Cho đến nay tôi thấy nhiều như nhau. Tôi có thể sẽ tham gia vào danh sách gửi thư vui vẻ vì tôi đã tập hợp một danh sách khá lớn các câu hỏi, tuy nhiên, tôi thấy SO là một định dạng tốt hơn để lưu trữ các loại câu hỏi này để phục vụ tốt hơn những người khác sau này. Là một nhà phát triển, tôi thực sự rất không hài lòng với kết quả tìm kiếm danh sách gửi thư LOL. Bạn luôn có xu hướng tìm chúng theo từng phần và sau đó định dạng trả lời là xấu. Tôi chắc chắn rằng có một người front-end có xu hướng xem những thứ đó từ, nhưng tôi thường chỉ là đất trên chúng từ tìm kiếm google. –

+1

Hãy thoải mái viết câu trả lời cho câu hỏi của bạn khi bạn nhận được câu hỏi ... Tôi đồng ý rằng việc đọc câu trả lời trên SO so với các địa điểm khác thường dễ dàng hơn. Nhưng mọi người không sử dụng SO, và những người như Chandler Carruth là một trong những người đứng sau PassManager mới khá tích cực trong danh sách gửi thư của LLVM. –

Trả lời

0

Từ những gì tôi đã thu thập được với sự giúp đỡ từ 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); 

Tuy nhiên, để tránh những rắc rối của tay đăng ký từng vượt qua, bạn có thể sử dụng PassBuilder để đăng ký phân tích đi

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

FunctionAnalysisManager FAM; 

PassBuilder PB; 
PB.registerFunctionAnalyses(FAM); 

FPM.run(*myFunction, FAM);