---
title: 更新Pass使用NewPassManager
description: "在毕昇编译器中，用户可以使用NewPassManager实现的自定义Pass。以下是一个在函数退出时输出信息的简单功能函数，这里我们示范如何用NewPassManager实现一个完成这个功能的Pass。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/bisheng/hist-bisheng/kunpengbisheng_06_0084_1.html
sourcePath: /source/zh/kunpengdevkithistory/bisheng/hist-bisheng/kunpengbisheng_06_0084_1.html
indexId: 74e50e34b6a173e17bdb5d4b13bff3824effa11da86d080f3feaf64e238970d682
---
# 更新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() 表示所有的分析结果都需要重新计算。
