Mat*_*ers 12 c++ compiler-construction llvm
我正在使用LLVM C++ API开发一种新语言,并希望利用优化过程.(注意:我目前正在使用来自源LLVM的最新产品,我认为相当于3.8)
我还没有找到任何使用新PassManager的例子,甚至Clang仍在使用LegacyPassManager.
我所遇到的职位,如这是几年前的,现在提及新PassManager,但他们都仍然使用旧系统.
有没有关于如何使用这个新的(ish)PassManager的示例/教程?新的LLVM项目是否更喜欢PassManager到LegacyPassManager?Clang是否计划迁移,或者这就是遗产系统陷入困境的原因?
根据我在#llvm IRC的帮助下收集的内容:
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);
Run Code Online (Sandbox Code Playgroud)
但是为了避免手动注册每个通行证的麻烦,您可以使用PassBuilder注册分析通行证
FunctionPassManager FPM;
FPM.addPass(InstCombinePass());
FunctionAnalysisManager FAM;
PassBuilder PB;
PB.registerFunctionAnalyses(FAM);
FPM.run(*myFunction, FAM);
Run Code Online (Sandbox Code Playgroud)
扩展 Lukes 答案,PassBuilder您可以构建具有不同优化级别的预定义“开箱即用”简化管道:
llvm::FunctionAnalysisManager FAManager;
llvm::PassBuilder passBuilder;
passBuilder.registerFunctionAnalyses(FAManager);
passBuilder.buildFunctionSimplificationPipeline(
llvm::PassBuilder::OptimizationLevel::O2,
llvm::PassBuilder::ThinLTOPhase::None);
Run Code Online (Sandbox Code Playgroud)
这将添加一堆通行证到FunctionAnalysisManager. 这可能会简化您的生活。查看为每个添加的全套通行证的最佳位置OptimizationLevel是原始来源。
| 归档时间: |
|
| 查看次数: |
1961 次 |
| 最近记录: |