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

更新Pass使用NewPassManager

在毕昇编译器中,用户可以使用NewPassManager实现的自定义Pass。以下是一个在函数退出时输出信息的简单功能函数,这里我们示范如何用NewPassManager实现一个完成这个功能的Pass。

1
2
3
4
5
bool runBye(Function &F) {
    errs() << "Bye: ";
    errs().write_escaped(F.getName()) << '\n';
    return false;
}

使用NewPassManager实现Bye Pass:

1
2
3
4
5
6
7
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() 表示所有的分析结果都需要重新计算。