38 lines · cpp
1#include "llvm/IR/Function.h"2#include "llvm/IR/Module.h"3#include "llvm/Pass.h"4#include "llvm/Passes/PassBuilder.h"5#include "llvm/Passes/PassPlugin.h"6#include "llvm/Support/CommandLine.h"7#include "llvm/Support/raw_ostream.h"8 9#include "llvm/Analysis/InlineAdvisor.h"10 11using namespace llvm;12 13namespace {14 15InlineAdvisor *DefaultAdvisorFactory(Module &M, FunctionAnalysisManager &FAM,16 InlineParams Params, InlineContext IC) {17 return new DefaultInlineAdvisor(M, FAM, Params, IC);18}19 20} // namespace21 22/* New PM Registration */23llvm::PassPluginLibraryInfo getDefaultDynamicAdvisorPluginInfo() {24 return {LLVM_PLUGIN_API_VERSION, "DynamicDefaultAdvisor", LLVM_VERSION_STRING,25 [](PassBuilder &PB) {26 PB.registerAnalysisRegistrationCallback(27 [](ModuleAnalysisManager &MAM) {28 PluginInlineAdvisorAnalysis PA(DefaultAdvisorFactory);29 MAM.registerPass([&] { return PA; });30 });31 }};32}33 34extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo35llvmGetPassPluginInfo() {36 return getDefaultDynamicAdvisorPluginInfo();37}38