From ff8016fceab6f479bf4a443dfbcd7aac34817a0f Mon Sep 17 00:00:00 2001 From: Wei Mi Date: Tue, 7 Aug 2018 18:13:10 +0000 Subject: [PATCH] [SampleFDO] Fix a bug in getOrCompHotCountThreshold/getOrCompColdCountThreshold getOrCompHotCountThreshold/getOrCompColdCountThreshold introduced in https://reviews.llvm.org/D45377 contain a bad mistake and will only return 1 or 0 instead of the true hot/cold cutoff value. The patch fixes the mistake. But the mistake seems not causing big performance difference according to internal server benchmarks testing. Differential Revision: https://reviews.llvm.org/D50370 llvm-svn: 339162 --- lib/Analysis/ProfileSummaryInfo.cpp | 4 ++-- test/Transforms/SampleProfile/Inputs/function_metadata.prof | 2 ++ test/Transforms/SampleProfile/function_metadata.ll | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/Analysis/ProfileSummaryInfo.cpp b/lib/Analysis/ProfileSummaryInfo.cpp index fb591f5d6a6..aeaa5172b3e 100644 --- a/lib/Analysis/ProfileSummaryInfo.cpp +++ b/lib/Analysis/ProfileSummaryInfo.cpp @@ -226,13 +226,13 @@ bool ProfileSummaryInfo::isColdCount(uint64_t C) { uint64_t ProfileSummaryInfo::getOrCompHotCountThreshold() { if (!HotCountThreshold) computeThresholds(); - return HotCountThreshold && HotCountThreshold.getValue(); + return HotCountThreshold ? HotCountThreshold.getValue() : UINT64_MAX; } uint64_t ProfileSummaryInfo::getOrCompColdCountThreshold() { if (!ColdCountThreshold) computeThresholds(); - return ColdCountThreshold && ColdCountThreshold.getValue(); + return ColdCountThreshold ? ColdCountThreshold.getValue() : 0; } bool ProfileSummaryInfo::isHotBB(const BasicBlock *B, BlockFrequencyInfo *BFI) { diff --git a/test/Transforms/SampleProfile/Inputs/function_metadata.prof b/test/Transforms/SampleProfile/Inputs/function_metadata.prof index 4a348d9fa07..239b5014b36 100644 --- a/test/Transforms/SampleProfile/Inputs/function_metadata.prof +++ b/test/Transforms/SampleProfile/Inputs/function_metadata.prof @@ -1,4 +1,6 @@ test:10000:0 + 2: 100 + 3: 100 3: foo:1000 3: bar:200 4: baz:10 diff --git a/test/Transforms/SampleProfile/function_metadata.ll b/test/Transforms/SampleProfile/function_metadata.ll index 41cff6e7977..18363514711 100644 --- a/test/Transforms/SampleProfile/function_metadata.ll +++ b/test/Transforms/SampleProfile/function_metadata.ll @@ -27,8 +27,10 @@ define void @test_liveness() !dbg !12 { } ; GUIDs of foo, bar, foo1, foo2 and foo3 should be included in the metadata to -; make sure hot inline stacks are imported. -; CHECK: ![[ENTRY_TEST]] = !{!"function_entry_count", i64 1, i64 2494702099028631698, i64 6699318081062747564, i64 7546896869197086323, i64 7682762345278052905, i64 -7908226060800700466, i64 -2012135647395072713} +; make sure hot inline stacks are imported. The total count of baz is lower +; than the hot cutoff threshold and its GUID should not be included in the +; metadata. +; CHECK: ![[ENTRY_TEST]] = !{!"function_entry_count", i64 1, i64 2494702099028631698, i64 6699318081062747564, i64 7682762345278052905, i64 -7908226060800700466, i64 -2012135647395072713} ; Check GUIDs for both foo and foo_available are included in the metadata to ; make sure the liveness analysis can capture the dependency from test_liveness