[PATCH] D50822: [BFI] Use rounding while computing profile counts.
Easwaran Raman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 15 17:27:52 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL339835: [BFI] Use rounding while computing profile counts. (authored by eraman, committed by ).
Repository:
rL LLVM
https://reviews.llvm.org/D50822
Files:
llvm/trunk/lib/Analysis/BlockFrequencyInfoImpl.cpp
llvm/trunk/test/Analysis/BlockFrequencyInfo/irreducible_pgo.ll
llvm/trunk/test/Instrumentation/cgprofile.ll
llvm/trunk/unittests/Analysis/BlockFrequencyInfoTest.cpp
Index: llvm/trunk/lib/Analysis/BlockFrequencyInfoImpl.cpp
===================================================================
--- llvm/trunk/lib/Analysis/BlockFrequencyInfoImpl.cpp
+++ llvm/trunk/lib/Analysis/BlockFrequencyInfoImpl.cpp
@@ -573,7 +573,9 @@
APInt BlockFreq(128, Freq);
APInt EntryFreq(128, getEntryFreq());
BlockCount *= BlockFreq;
- BlockCount = BlockCount.udiv(EntryFreq);
+ // Rounded division of BlockCount by EntryFreq. Since EntryFreq is unsigned
+ // lshr by 1 gives EntryFreq/2.
+ BlockCount = (BlockCount + EntryFreq.lshr(1)).udiv(EntryFreq);
return BlockCount.getLimitedValue();
}
Index: llvm/trunk/unittests/Analysis/BlockFrequencyInfoTest.cpp
===================================================================
--- llvm/trunk/unittests/Analysis/BlockFrequencyInfoTest.cpp
+++ llvm/trunk/unittests/Analysis/BlockFrequencyInfoTest.cpp
@@ -77,8 +77,10 @@
EXPECT_EQ(BFI.getBlockProfileCount(&BB0).getValue(), UINT64_C(100));
EXPECT_EQ(BFI.getBlockProfileCount(BB3).getValue(), UINT64_C(100));
- EXPECT_EQ(BFI.getBlockProfileCount(BB1).getValue(), 100 * BB1Freq / BB0Freq);
- EXPECT_EQ(BFI.getBlockProfileCount(BB2).getValue(), 100 * BB2Freq / BB0Freq);
+ EXPECT_EQ(BFI.getBlockProfileCount(BB1).getValue(),
+ (100 * BB1Freq + BB0Freq / 2) / BB0Freq);
+ EXPECT_EQ(BFI.getBlockProfileCount(BB2).getValue(),
+ (100 * BB2Freq + BB0Freq / 2) / BB0Freq);
// Scale the frequencies of BB0, BB1 and BB2 by a factor of two.
SmallPtrSet<BasicBlock *, 4> BlocksToScale({BB1, BB2});
Index: llvm/trunk/test/Instrumentation/cgprofile.ll
===================================================================
--- llvm/trunk/test/Instrumentation/cgprofile.ll
+++ llvm/trunk/test/Instrumentation/cgprofile.ll
@@ -38,4 +38,4 @@
; CHECK: ![[e3]] = !{void (i1)* @freq, i32 ()* @func3, i64 150}
; CHECK: ![[e4]] = !{void (i1)* @freq, i32 ()* @func1, i64 10}
; CHECK: ![[e5]] = !{void (i1)* @freq, void ()* @a, i64 11}
-; CHECK: ![[e6]] = !{void (i1)* @freq, void ()* @b, i64 20}
+; CHECK: ![[e6]] = !{void (i1)* @freq, void ()* @b, i64 21}
Index: llvm/trunk/test/Analysis/BlockFrequencyInfo/irreducible_pgo.ll
===================================================================
--- llvm/trunk/test/Analysis/BlockFrequencyInfo/irreducible_pgo.ll
+++ llvm/trunk/test/Analysis/BlockFrequencyInfo/irreducible_pgo.ll
@@ -146,19 +146,19 @@
; CHECK-NEXT: block-frequency-info: _Z11irreduciblePh
; CHECK-NEXT: - entry: {{.*}} count = 1
; CHECK-NEXT: - for.cond1: {{.*}} count = 1
-; CHECK-NEXT: - dispatch_op: {{.*}} count = 201
-; CHECK-NEXT: - dispatch_op.sw.bb6_crit_edge: {{.*}} count = 200
-; CHECK-NEXT: - sw.bb: {{.*}} count = 0
-; CHECK-NEXT: - TARGET_1: {{.*}} count = 299
-; CHECK-NEXT: - sw.bb6: {{.*}} count = 500, irr_loop_header_weight = 501
-; CHECK-NEXT: - if.then: {{.*}} count = 299
-; CHECK-NEXT: - TARGET_2: {{.*}} count = 98
-; CHECK-NEXT: - sw.bb15: {{.*}} count = 99, irr_loop_header_weight = 100
-; CHECK-NEXT: - if.then18: {{.*}} count = 99
+; CHECK-NEXT: - dispatch_op: {{.*}} count = 202
+; CHECK-NEXT: - dispatch_op.sw.bb6_crit_edge: {{.*}} count = 201
+; CHECK-NEXT: - sw.bb: {{.*}} count = 1
+; CHECK-NEXT: - TARGET_1: {{.*}} count = 300
+; CHECK-NEXT: - sw.bb6: {{.*}} count = 501, irr_loop_header_weight = 501
+; CHECK-NEXT: - if.then: {{.*}} count = 300
+; CHECK-NEXT: - TARGET_2: {{.*}} count = 99
+; CHECK-NEXT: - sw.bb15: {{.*}} count = 100, irr_loop_header_weight = 100
+; CHECK-NEXT: - if.then18: {{.*}} count = 100
; CHECK-NEXT: - unknown_op: {{.*}} count = 0
; CHECK-NEXT: - sw.default: {{.*}} count = 0
; CHECK-NEXT: - exit: {{.*}} count = 1
-; CHECK-NEXT: - indirectgoto: {{.*}} count = 399, irr_loop_header_weight = 400
+; CHECK-NEXT: - indirectgoto: {{.*}} count = 400, irr_loop_header_weight = 400
; Missing some irr loop annotations.
; Function Attrs: noinline norecurse nounwind uwtable
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50822.160955.patch
Type: text/x-patch
Size: 3898 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180816/3c6c4f6c/attachment.bin>
More information about the llvm-commits
mailing list