15b455a8eSibricchi #include "llvm/IR/Function.h" 25b455a8eSibricchi #include "llvm/IR/Module.h" 35b455a8eSibricchi #include "llvm/Pass.h" 45b455a8eSibricchi #include "llvm/Passes/PassBuilder.h" 55b455a8eSibricchi #include "llvm/Passes/PassPlugin.h" 65b455a8eSibricchi #include "llvm/Support/CommandLine.h" 75b455a8eSibricchi #include "llvm/Support/raw_ostream.h" 85b455a8eSibricchi 95b455a8eSibricchi #include "llvm/Analysis/InlineAdvisor.h" 105b455a8eSibricchi 115b455a8eSibricchi using namespace llvm; 125b455a8eSibricchi 135b455a8eSibricchi namespace { 145b455a8eSibricchi 155b455a8eSibricchi InlineAdvisor *DefaultAdvisorFactory(Module &M, FunctionAnalysisManager &FAM, 165b455a8eSibricchi InlineParams Params, InlineContext IC) { 175b455a8eSibricchi return new DefaultInlineAdvisor(M, FAM, Params, IC); 185b455a8eSibricchi } 195b455a8eSibricchi 205b455a8eSibricchi } // namespace 215b455a8eSibricchi 225b455a8eSibricchi /* New PM Registration */ 235b455a8eSibricchi llvm::PassPluginLibraryInfo getDefaultDynamicAdvisorPluginInfo() { 245b455a8eSibricchi return {LLVM_PLUGIN_API_VERSION, "DynamicDefaultAdvisor", LLVM_VERSION_STRING, 255b455a8eSibricchi [](PassBuilder &PB) { 26*c84a99dfSMichele Scandale PB.registerAnalysisRegistrationCallback( 27*c84a99dfSMichele Scandale [](ModuleAnalysisManager &MAM) { 28*c84a99dfSMichele Scandale PluginInlineAdvisorAnalysis PA(DefaultAdvisorFactory); 29*c84a99dfSMichele Scandale MAM.registerPass([&] { return PA; }); 305b455a8eSibricchi }); 315b455a8eSibricchi }}; 325b455a8eSibricchi } 335b455a8eSibricchi 345b455a8eSibricchi extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo 355b455a8eSibricchi llvmGetPassPluginInfo() { 365b455a8eSibricchi return getDefaultDynamicAdvisorPluginInfo(); 375b455a8eSibricchi } 38