diff --git a/llvm/lib/Transforms/IPO/AlwaysInliner.cpp b/llvm/lib/Transforms/IPO/AlwaysInliner.cpp --- a/llvm/lib/Transforms/IPO/AlwaysInliner.cpp +++ b/llvm/lib/Transforms/IPO/AlwaysInliner.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/SetVector.h" #include "llvm/Analysis/AssumptionCache.h" #include "llvm/Analysis/InlineCost.h" +#include "llvm/Analysis/ProfileSummaryInfo.h" #include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/IR/CallingConv.h" #include "llvm/IR/DataLayout.h" @@ -39,7 +40,7 @@ auto GetAssumptionCache = [&](Function &F) -> AssumptionCache & { return FAM.getResult(F); }; - InlineFunctionInfo IFI(/*cg=*/nullptr, GetAssumptionCache); + auto &PSI = MAM.getResult(M); SmallSetVector Calls; bool Changed = false; @@ -67,6 +68,11 @@ emitInlinedInto(ORE, CB->getDebugLoc(), CB->getParent(), F, *Caller, *OIC, false, DEBUG_TYPE); + InlineFunctionInfo IFI( + /*cg=*/nullptr, GetAssumptionCache, &PSI, + &FAM.getResult(*(CB->getCaller())), + &FAM.getResult(F)); + InlineResult Res = InlineFunction(*CB, IFI, /*CalleeAAR=*/nullptr, InsertLifetime); assert(Res.isSuccess() && "unexpected failure to inline"); diff --git a/llvm/test/Transforms/Inline/prof-update-sample.ll b/llvm/test/Transforms/Inline/prof-update-sample.ll --- a/llvm/test/Transforms/Inline/prof-update-sample.ll +++ b/llvm/test/Transforms/Inline/prof-update-sample.ll @@ -1,12 +1,13 @@ ; RUN: opt < %s -inline -S | FileCheck %s +; RUN: opt < %s -passes=always-inline -S | FileCheck %s ; Checks if inliner updates branch_weights annotation for call instructions. declare void @ext(); declare void @ext1(); @func = global void ()* null -; CHECK: define void @callee(i32 %n) !prof ![[ENTRY_COUNT:[0-9]*]] -define void @callee(i32 %n) !prof !15 { +; CHECK: define void @callee(i32 %n) #0 !prof ![[ENTRY_COUNT:[0-9]*]] +define void @callee(i32 %n) #0 !prof !15 { %cond = icmp sle i32 %n, 10 br i1 %cond, label %cond_true, label %cond_false cond_true: