[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