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-alwaysinline.ll copy from llvm/test/Transforms/Inline/prof-update-sample.ll copy to llvm/test/Transforms/Inline/prof-update-sample-alwaysinline.ll --- a/llvm/test/Transforms/Inline/prof-update-sample.ll +++ b/llvm/test/Transforms/Inline/prof-update-sample-alwaysinline.ll @@ -1,12 +1,12 @@ -; RUN: opt < %s -inline -S | FileCheck %s -; Checks if inliner updates branch_weights annotation for call instructions. +; RUN: opt < %s -passes=always-inline -S | FileCheck %s +; Checks if always-inline 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: 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 @@ -51,7 +51,6 @@ !16 = !{!"branch_weights", i64 2000} !17 = !{!"branch_weights", i64 400} !18 = !{!"VP", i32 0, i64 140, i64 111, i64 80, i64 222, i64 40, i64 333, i64 20} -attributes #0 = { alwaysinline } ; CHECK: ![[ENTRY_COUNT]] = !{!"function_entry_count", i64 600} ; CHECK: ![[COUNT_CALLEE1]] = !{!"branch_weights", i64 2000} ; CHECK: ![[COUNT_CALLEE]] = !{!"branch_weights", i64 1200}