我正在使用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);
但是为了避免手动注册每个通行证的麻烦,您可以使用PassBuilder
注册分析通行证
FunctionPassManager FPM; FPM.addPass(InstCombinePass()); FunctionAnalysisManager FAM; PassBuilder PB; PB.registerFunctionAnalyses(FAM); FPM.run(*myFunction, FAM);