我正在尝试编写一个简单的“现代”LLVM pass 并将其与 Clang 一起使用。我希望它能够使用如下命令运行:
clang -Xclang -load -Xclang libMyPass.so file.cpp
有很多关于如何将遗留通行证集成到 Clang 中的手册。然而,关于新通行证管理器的信息并不多。我看到了一系列名为“2018 年编写 LLVM Pass”的文章。但它只提到了您的密码放置在 LLVM 代码树内的情况。我需要在树外构建模块。
class MyPass : public llvm::PassInfoMixin<MyPass> {
public:
llvm::PreservedAnalyses run(
llvm::Function &F,
llvm::FunctionAnalysisManager &FAM
) {
// Pass code here
}
};
extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
llvmGetPassPluginInfo() {
return {
LLVM_PLUGIN_API_VERSION, "MyPass", "v0.1",
[](llvm::PassBuilder &PB) {
PB.registerPipelineParsingCallback(
[](
llvm::StringRef Name, llvm::FunctionPassManager &FPM,
llvm::ArrayRef <llvm::PassBuilder::PipelineElement>
) {
if (Name == "my-pass") {
FPM.addPass(MyPass());
return true;
}
return false;
}
);
}
};
} …Run Code Online (Sandbox Code Playgroud)