From c5e1506ec8c43dc44fa00e08c6cc14b330044987 Mon Sep 17 00:00:00 2001 From: Easwaran Raman Date: Fri, 2 Nov 2018 17:39:31 +0000 Subject: [PATCH] [ProfileSummary] Add options to override hot and cold count thresholds. Summary: The hot and cold count thresholds are derived from the summary, but for debugging purposes it is convenient to provide the actual thresholds. Reviewers: davidxl Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D54040 llvm-svn: 346005 --- llvm/lib/Analysis/ProfileSummaryInfo.cpp | 18 ++++++++++++++++++ llvm/test/Analysis/ProfileSummary/basic.ll | 12 ++++++++++++ 2 files changed, 30 insertions(+) diff --git a/llvm/lib/Analysis/ProfileSummaryInfo.cpp b/llvm/lib/Analysis/ProfileSummaryInfo.cpp index aeaa5172b3e6b..7472b6201c2b3 100644 --- a/llvm/lib/Analysis/ProfileSummaryInfo.cpp +++ b/llvm/lib/Analysis/ProfileSummaryInfo.cpp @@ -51,6 +51,18 @@ static cl::opt ProfileSummaryHugeWorkingSetSizeThreshold( " blocks required to reach the -profile-summary-cutoff-hot" " percentile exceeds this count.")); +// The next two options override the counts derived from summary computation and +// are useful for debugging purposes. +static cl::opt ProfileSummaryHotCount( + "profile-summary-hot-count", cl::ReallyHidden, cl::ZeroOrMore, + cl::desc("A fixed hot count that overrides the count derived from" + " profile-summary-cutoff-hot")); + +static cl::opt ProfileSummaryColdCount( + "profile-summary-cold-count", cl::ReallyHidden, cl::ZeroOrMore, + cl::desc("A fixed cold count that overrides the count derived from" + " profile-summary-cutoff-cold")); + // Find the summary entry for a desired percentile of counts. static const ProfileSummaryEntry &getEntryForPercentile(SummaryEntryVector &DS, uint64_t Percentile) { @@ -198,9 +210,15 @@ void ProfileSummaryInfo::computeThresholds() { auto &HotEntry = getEntryForPercentile(DetailedSummary, ProfileSummaryCutoffHot); HotCountThreshold = HotEntry.MinCount; + if (ProfileSummaryHotCount.getNumOccurrences() > 0) + HotCountThreshold = ProfileSummaryHotCount; auto &ColdEntry = getEntryForPercentile(DetailedSummary, ProfileSummaryCutoffCold); ColdCountThreshold = ColdEntry.MinCount; + if (ProfileSummaryColdCount.getNumOccurrences() > 0) + ColdCountThreshold = ProfileSummaryColdCount; + assert(ColdCountThreshold <= HotCountThreshold && + "Cold count threshold cannot exceed hot count threshold!"); HasHugeWorkingSetSize = HotEntry.NumCounts > ProfileSummaryHugeWorkingSetSizeThreshold; } diff --git a/llvm/test/Analysis/ProfileSummary/basic.ll b/llvm/test/Analysis/ProfileSummary/basic.ll index e417e459f04ca..966a1117c47d1 100644 --- a/llvm/test/Analysis/ProfileSummary/basic.ll +++ b/llvm/test/Analysis/ProfileSummary/basic.ll @@ -1,19 +1,31 @@ ; RUN: opt < %s -disable-output -passes=print-profile-summary -S 2>&1 | FileCheck %s +; RUN: opt < %s -disable-output -profile-summary-hot-count=500 -passes=print-profile-summary -S 2>&1 | FileCheck %s -check-prefixes=OVERRIDE-HOT +; RUN: opt < %s -disable-output -profile-summary-cold-count=0 -passes=print-profile-summary -S 2>&1 | FileCheck %s -check-prefixes=OVERRIDE-COLD +; RUN: opt < %s -disable-output -profile-summary-cold-count=200 -profile-summary-hot-count=1000 -passes=print-profile-summary -S 2>&1 | FileCheck %s -check-prefixes=OVERRIDE-BOTH define void @f1() !prof !20 { ; CHECK-LABEL: f1 :hot +; OVERRIDE-HOT-LABEL: f1 +; OVERRIDE-COLD-LABEL: f1 :hot +; OVERRIDE-BOTH-LABEL: f1 ret void } define void @f2() !prof !21 { ; CHECK-LABEL: f2 :cold +; OVERRIDE-HOT-LABEL: f2 :cold +; OVERRIDE-COLD-LABEL: f2 +; OVERRIDE-BOTH-LABEL: f2 ret void } define void @f3() !prof !22 { ; CHECK-LABEL: f3 +; OVERRIDE-HOT-LABEL: f3 +; OVERRIDE-COLD-LABEL: f3 +; OVERRIDE-BOTH-LABEL: f3 ret void }