中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

更新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() 表示所有的分析结果都需要重新计算。