---
title: 完整使用用例
description: "以下提供一个完整使用该功能的代码示例。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0086.html
sourcePath: /source/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0086.html
indexId: 4028675d177934e976f3d541a5828549eac386c95eb0839c1fdc0189cbce303574
---
# 完整使用用例

以下提供一个完整使用该功能的代码示例。

```
#include "llvm/IR/Function.h"
#include "llvm/Pass.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/Passes/PassPlugin.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
namespace {
bool runBye(Function &F) {
    errs() << "Bye: ";
    errs().write_escaped(F.getName()) << '\n';
    return false;
}
struct Bye : PassInfoMixin<Bye> {
    PreservedAnalyses run(Function &F, FunctionAnalysisManager &) {
        if (!runBye(F))
            return PreservedAnalyses::all();
        return PreservedAnalyses::none();
    }
};
}
/* New PM Registration */
extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo
llvmGetPassPluginInfo() {
    return {LLVM_PLUGIN_API_VERSION, "Bye", LLVM_VERSION_STRING,
          [](PassBuilder &PB) {
            PB.registerVectorizerStartEPCallback(
                [](llvm::FunctionPassManager &PM, OptimizationLevel Level) {
                  PM.addPass(Bye());
                });
          }};
}
```

然后使用以下命令来使用这个Pass，这里使用的clang和clang++都是从毕昇编译器软件包获取的。

```
clang++ MyPass.cpp -fPIC -shared -o bye.so `llvm-config --cxxflags --ldflags`
cat minimal.c 
int main() {return 0;}
clang -fplugin=./bye.so -fpass-plugin=./bye.so -O3 minimal.c
Bye: main
```

这里不要手动使用 -I -L，需要使用llvm-config。使用-fplugin=./bye.so -fpass-plugin=./bye.so来加载Pass。
