更新Pass使用NewPassManager
在毕昇编译器中,用户可以使用NewPassManager实现的自定义Pass。以下是一个在函数退出时输出信息的简单功能函数,这里我们示范如何用NewPassManager实现一个完成这个功能的Pass。
bool runBye(Function &F) { errs() << "Bye: "; errs().write_escaped(F.getName()) << '\n'; return false; }
使用NewPassManager实现Bye Pass:
struct Bye : PassInfoMixin<Bye> { PreservedAnalyses run(Function &F, FunctionAnalysisManager &) { if (!runBye(F)) return PreservedAnalyses::all(); return PreservedAnalyses::none(); } };
PassInfoMixin 提供了一种简洁的方式来定义 pass。在New Pass中,编程人员只需要自定义run函数就可以了,用户可以在run中运行自己完成的功能函数,这里调用的是上例runBye()。然后返回值告诉毕昇编译器哪些分析结果仍然有效,哪些需要重新计算。
- PreservedAnalyses::all() 表示所有的分析结果都仍然有效。
- PreservedAnalyses::none() 表示所有的分析结果都需要重新计算。
父主题: 如何在毕昇编译器中使用自定义Pass