[llvm] r311706 - Move accurate-sample-profile into the function attribute.
Dehao Chen via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 24 14:37:05 PDT 2017
Author: dehao
Date: Thu Aug 24 14:37:04 2017
New Revision: 311706
URL: http://llvm.org/viewvc/llvm-project?rev=311706&view=rev
Log:
Move accurate-sample-profile into the function attribute.
Summary: We need to have accurate-sample-profile in function attribute so that it works with LTO.
Reviewers: davidxl, rsmith
Reviewed By: davidxl
Subscribers: sanjoy, mehdi_amini, javed.absar, llvm-commits, eraman
Differential Revision: https://reviews.llvm.org/D37113
Modified:
llvm/trunk/include/llvm/IR/Attributes.td
llvm/trunk/lib/Analysis/ProfileSummaryInfo.cpp
llvm/trunk/test/Transforms/Inline/inline-cold-callsite-samplepgo.ll
Modified: llvm/trunk/include/llvm/IR/Attributes.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Attributes.td?rev=311706&r1=311705&r2=311706&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Attributes.td (original)
+++ llvm/trunk/include/llvm/IR/Attributes.td Thu Aug 24 14:37:04 2017
@@ -185,6 +185,7 @@ def NoInfsFPMath : StrBoolAttr<"no-infs-
def NoNansFPMath : StrBoolAttr<"no-nans-fp-math">;
def UnsafeFPMath : StrBoolAttr<"unsafe-fp-math">;
def NoJumpTables : StrBoolAttr<"no-jump-tables">;
+def ProfileSampleAccurate : StrBoolAttr<"profile-sample-accurate">;
class CompatRule<string F> {
// The name of the function called to check the attribute of the caller and
@@ -216,6 +217,7 @@ def : MergeRule<"setAND<NoNansFPMathAttr
def : MergeRule<"setAND<UnsafeFPMathAttr>">;
def : MergeRule<"setOR<NoImplicitFloatAttr>">;
def : MergeRule<"setOR<NoJumpTablesAttr>">;
+def : MergeRule<"setOR<ProfileSampleAccurateAttr>">;
def : MergeRule<"adjustCallerSSPLevel">;
def : MergeRule<"adjustCallerStackProbes">;
def : MergeRule<"adjustCallerStackProbeSize">;
Modified: llvm/trunk/lib/Analysis/ProfileSummaryInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ProfileSummaryInfo.cpp?rev=311706&r1=311705&r2=311706&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/ProfileSummaryInfo.cpp (original)
+++ llvm/trunk/lib/Analysis/ProfileSummaryInfo.cpp Thu Aug 24 14:37:04 2017
@@ -39,8 +39,8 @@ static cl::opt<int> ProfileSummaryCutoff
cl::desc("A count is cold if it is below the minimum count"
" to reach this percentile of total counts."));
-static cl::opt<bool> AccurateSampleProfile(
- "accurate-sample-profile", cl::Hidden, cl::init(false),
+static cl::opt<bool> ProfileSampleAccurate(
+ "profile-sample-accurate", cl::Hidden, cl::init(false),
cl::desc("If the sample profile is accurate, we will mark all un-sampled "
"callsite as cold. Otherwise, treat un-sampled callsites as if "
"we have no profile."));
@@ -231,7 +231,8 @@ bool ProfileSummaryInfo::isColdCallSite(
// If there is no profile for the caller, and we know the profile is
// accurate, we consider the callsite as cold.
return (hasSampleProfile() &&
- (CS.getCaller()->getEntryCount() || AccurateSampleProfile));
+ (CS.getCaller()->getEntryCount() || ProfileSampleAccurate ||
+ CS.getCaller()->hasFnAttribute("profile-sample-accurate")));
}
INITIALIZE_PASS(ProfileSummaryInfoWrapperPass, "profile-summary-info",
Modified: llvm/trunk/test/Transforms/Inline/inline-cold-callsite-samplepgo.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline-cold-callsite-samplepgo.ll?rev=311706&r1=311705&r2=311706&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/Inline/inline-cold-callsite-samplepgo.ll (original)
+++ llvm/trunk/test/Transforms/Inline/inline-cold-callsite-samplepgo.ll Thu Aug 24 14:37:04 2017
@@ -1,8 +1,7 @@
-; For SamplePGO, if -accurate-sample-profile is specified, cold callsite
+; For SamplePGO, if -profile-sample-accurate is specified, cold callsite
; heuristics should be honored if the caller has no profile.
; RUN: opt < %s -inline -S -inline-cold-callsite-threshold=0 | FileCheck %s
-; RUN: opt < %s -inline -S -inline-cold-callsite-threshold=0 -accurate-sample-profile | FileCheck %s --check-prefix=ACCURATE
define i32 @callee(i32 %x) {
%x1 = add i32 %x, 1
@@ -14,14 +13,23 @@ define i32 @callee(i32 %x) {
}
define i32 @caller(i32 %y1) {
+; CHECK-LABEL: @caller
; CHECK-NOT: call i32 @callee
-; ACCURATE: call i32 @callee
+ %y2 = call i32 @callee(i32 %y1)
+ ret i32 %y2
+}
+
+define i32 @caller_accurate(i32 %y1) #0 {
+; CHECK-LABEL: @caller_accurate
+; CHECK: call i32 @callee
%y2 = call i32 @callee(i32 %y1)
ret i32 %y2
}
declare void @extern()
+attributes #0 = { "profile-sample-accurate" }
+
!llvm.module.flags = !{!1}
!1 = !{i32 1, !"ProfileSummary", !2}
!2 = !{!3, !4, !5, !6, !7, !8, !9, !10}
More information about the llvm-commits
mailing list