diff --git a/llvm/include/llvm/Passes/PassBuilder.h b/llvm/include/llvm/Passes/PassBuilder.h --- a/llvm/include/llvm/Passes/PassBuilder.h +++ b/llvm/include/llvm/Passes/PassBuilder.h @@ -631,6 +631,13 @@ std::string ProfileFile, std::string ProfileRemappingFile); + + /// Returns PIC. External libraries can use this to register pass + /// instrumentation callbacks. + PassInstrumentationCallbacks *getPassInstrumentationCallbacks() const { + return PIC; + } + private: static Optional> parsePipelineText(StringRef Text); diff --git a/llvm/unittests/IR/PassBuilderCallbacksTest.cpp b/llvm/unittests/IR/PassBuilderCallbacksTest.cpp --- a/llvm/unittests/IR/PassBuilderCallbacksTest.cpp +++ b/llvm/unittests/IR/PassBuilderCallbacksTest.cpp @@ -418,6 +418,9 @@ PB(nullptr, PipelineTuningOptions(), None, &CallbacksHandle.Callbacks), PM(true), LAM(true), FAM(true), CGAM(true), AM(true) { + EXPECT_TRUE(&CallbacksHandle.Callbacks == + PB.getPassInstrumentationCallbacks()); + /// Register a callback for analysis registration. /// /// The callback is a function taking a reference to an AnalyisManager