LLVM (3.5+) PassManager vs LegacyPassManager
LLVM (3.5+) PassManager vs LegacyPassManager
我正在使用LLVM C++API开发一种新语言,并希望利用优化过程。(注意:我目前正在使用最新的源LLVM,我认为它相当于3.8)
我还没有找到任何使用新PassManager的例子,甚至Clang仍在使用LegacyPassManager。
我遇到过这样的帖子,这些帖子已经有好几年的历史了,提到了新的PassManager,但它们仍然使用传统的系统。
有没有关于如何使用这个新的(ish)PassManager的示例/教程?新的LLVM项目应该更喜欢PassManager而不是LegacyPassManager吗?Clang是否计划迁移,或者这就是Legacy系统一直存在的原因?
根据我在#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);
但为了避免手动注册每个通行证的麻烦,您可以使用PassBuilder
来注册分析通行证
FunctionPassManager FPM;
FPM.addPass(InstCombinePass());
FunctionAnalysisManager FAM;
PassBuilder PB;
PB.registerFunctionAnalyses(FAM);
FPM.run(*myFunction, FAM);
扩展Lukes答案,使用PassBuilder
,您可以构建具有不同优化级别的预定义"开箱即用"简化管道:
llvm::FunctionAnalysisManager FAManager;
llvm::PassBuilder passBuilder;
passBuilder.registerFunctionAnalyses(FAManager);
passBuilder.buildFunctionSimplificationPipeline(
llvm::PassBuilder::OptimizationLevel::O2,
llvm::PassBuilder::ThinLTOPhase::None);
这将向CCD_ 3添加一组通行证。这可能会简化你的生活。查看为每个OptimizationLevel
添加的全套过程的最佳位置是原始源。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- LLVM (3.5+) PassManager vs LegacyPassManager