[BOLT] computing raw branch count for yaml profiles
authorspupyrev <spupyrev@fb.com>
Thu, 16 Feb 2023 18:52:04 +0000 (10:52 -0800)
committerspupyrev <spupyrev@fb.com>
Tue, 28 Mar 2023 18:09:21 +0000 (11:09 -0700)
`Function.RawBranchCount` is initialized for fdata profile but not for yaml one.
The diff adds the computation of the field for yaml profiles

Reviewed By: Amir

Differential Revision: https://reviews.llvm.org/D144211

bolt/include/bolt/Core/BinaryFunction.h
bolt/lib/Core/BinaryFunction.cpp
bolt/lib/Profile/YAMLProfileReader.cpp
bolt/test/X86/branch-data.test

index 7a99ce2..a96243c 100644 (file)
@@ -1794,6 +1794,10 @@ public:
   /// executions corresponding to this function.
   uint64_t getRawBranchCount() const { return RawBranchCount; }
 
+  /// Set the profile data about the number of branch executions corresponding
+  /// to this function.
+  void setRawBranchCount(uint64_t Count) { RawBranchCount = Count; }
+
   /// Return the execution count for functions with known profile.
   /// Return 0 if the function has no profile.
   uint64_t getKnownExecutionCount() const {
index 1cbdd6b..69ebd12 100644 (file)
@@ -470,6 +470,7 @@ void BinaryFunction::print(raw_ostream &OS, std::string Annotation) {
     OS << "\n  Image       : 0x" << Twine::utohexstr(getImageAddress());
   if (ExecutionCount != COUNT_NO_PROFILE) {
     OS << "\n  Exec Count  : " << ExecutionCount;
+    OS << "\n  Branch Count: " << RawBranchCount;
     OS << "\n  Profile Acc : " << format("%.1f%%", ProfileMatchRatio * 100.0f);
   }
 
index 13f56ed..0e4ab57 100644 (file)
@@ -83,6 +83,12 @@ bool YAMLProfileReader::parseFunctionProfile(
 
   BF.setExecutionCount(YamlBF.ExecCount);
 
+  uint64_t FuncRawBranchCount = 0;
+  for (const yaml::bolt::BinaryBasicBlockProfile &YamlBB : YamlBF.Blocks)
+    for (const yaml::bolt::SuccessorInfo &YamlSI : YamlBB.Successors)
+      FuncRawBranchCount += YamlSI.Count;
+  BF.setRawBranchCount(FuncRawBranchCount);
+
   if (!opts::IgnoreHash && YamlBF.Hash != BF.computeHash(/*UseDFS=*/true)) {
     if (opts::Verbosity >= 1)
       errs() << "BOLT-WARNING: function hash mismatch\n";
index 24f90f2..5d6ff92 100644 (file)
@@ -3,18 +3,19 @@
 # Also checks that llvm-bolt disassembler and CFG builder is working properly.
 
 RUN: yaml2obj %p/Inputs/blarge.yaml &> %t.exe
-RUN: llvm-bolt %t.exe -o /dev/null --data %p/Inputs/blarge.fdata --print-cfg
+RUN: llvm-bolt %t.exe -o /dev/null --data %p/Inputs/blarge.fdata --print-cfg | FileCheck %s
 
 CHECK:    Binary Function "usqrt"
 CHECK:      State       : CFG constructed
 CHECK:      Address     : 0x401170
 CHECK:      Size        : 0x43
-CHECK:      MaxSize     : 0x50
-CHECK:      Offset      : 0x1170
+CHECK:      MaxSize     : 0x43
+CHECK:      Offset      : 0xcb0
 CHECK:      Section     : .text
 CHECK:      IsSimple    : 1
 CHECK:      BB Count    : 5
 CHECK:      Exec Count  : 199
+CHECK:      Branch Count: 7689
 CHECK:    }
 CHECK:    .LBB{{.*}}
 CHECK:      Exec Count : 199