From e33e47695300decc0516f91e37573c57634467cc Mon Sep 17 00:00:00 2001 From: Douglas Chen Date: Sun, 19 Dec 2021 09:56:34 +0800 Subject: [PATCH] Register plugin with registerPipelineStartEPCallback() function. --- HelloWorld/HelloWorld.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/HelloWorld/HelloWorld.cpp b/HelloWorld/HelloWorld.cpp index 82ced8d..e1d877b 100644 --- a/HelloWorld/HelloWorld.cpp +++ b/HelloWorld/HelloWorld.cpp @@ -37,6 +37,9 @@ namespace { void visitor(Function &F) { errs() << "(llvm-tutor) Hello from: "<< F.getName() << "\n"; errs() << "(llvm-tutor) number of arguments: " << F.arg_size() << "\n"; + for (const Instruction &I : F.getEntryBlock()) { + errs() << "(llvm-tutor) Opcode : " << I.getOpcodeName() << "\n"; + } } // New PM implementation @@ -47,6 +50,10 @@ struct HelloWorld : PassInfoMixin { visitor(F); return PreservedAnalyses::all(); } + + static bool isRequired() { + return true; + } }; // Legacy PM implementation @@ -68,16 +75,14 @@ struct LegacyHelloWorld : public FunctionPass { llvm::PassPluginLibraryInfo getHelloWorldPluginInfo() { return {LLVM_PLUGIN_API_VERSION, "HelloWorld", LLVM_VERSION_STRING, [](PassBuilder &PB) { - PB.registerPipelineParsingCallback( - [](StringRef Name, FunctionPassManager &FPM, - ArrayRef) { - if (Name == "hello-world") { - FPM.addPass(HelloWorld()); - return true; - } - return false; - }); - }}; + errs() << "registerPipelineStartEPCallback" << "\n"; + PB.registerPipelineStartEPCallback( + [](ModulePassManager &MPM, OptimizationLevel Level) { + FunctionPassManager FPM; + FPM.addPass(HelloWorld()); + MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); + }); + }}; } // This is the core interface for pass plugins. It guarantees that 'opt' will -- 2.25.1