[PATCH] D159529: [BOLT][YAML] Only read first profile per function

Amir Ayupov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 18 20:41:03 PDT 2023


This revision was automatically updated to reflect the committed changes.
Closed by commit rG6a1cf545cc0b: [BOLT][YAML] Only read first profile per function (authored by Amir).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159529/new/

https://reviews.llvm.org/D159529

Files:
  bolt/lib/Profile/YAMLProfileReader.cpp
  bolt/test/X86/yaml-multiple-profiles.test


Index: bolt/test/X86/yaml-multiple-profiles.test
===================================================================
--- /dev/null
+++ bolt/test/X86/yaml-multiple-profiles.test
@@ -0,0 +1,53 @@
+# This test ensures that a YAML profile with multiple profiles matching the same
+# function is handled gracefully.
+
+# REQUIRES: system-linux
+# RUN: split-file %s %t
+# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %t/main.s -o %t.o
+# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -nostdlib
+# RUN: llvm-bolt %t.exe -o /dev/null --data %t/profile.yaml \
+# RUN:   --profile-ignore-hash -v=1 2>&1 | FileCheck %s
+# CHECK: BOLT-WARNING: dropping duplicate profile for main_alias(*2)
+#--- main.s
+  .globl main_alias
+  .type main_alias, %function
+main_alias:
+  .globl main
+  .type main, %function
+main:
+  .cfi_startproc
+  cmpl	$0x0, %eax
+  retq
+  .cfi_endproc
+.size main, .-main
+.size main_alias, .-main_alias
+#--- profile.yaml
+---
+header:
+  profile-version: 1
+  binary-name:     'yaml-multiple-profiles.test.tmp.exe'
+  binary-build-id: '<unknown>'
+  profile-flags:   [ lbr ]
+  profile-origin:  branch profile reader
+  profile-events:  ''
+  dfs-order:       false
+functions:
+  - name:            'main(*2)'
+    fid:             1
+    hash:            0x50BBA3441D436491
+    exec:            1
+    nblocks:         1
+    blocks:
+      - bid:             0
+        insns:           2
+        hash:            0x4D4D8FAF7D4C0000
+  - name:            'main_alias(*2)'
+    fid:             1
+    hash:            0x50BBA3441D436491
+    exec:            1
+    nblocks:         1
+    blocks:
+      - bid:             0
+        insns:           2
+        hash:            0x4D4D8FAF7D4C0000
+...
Index: bolt/lib/Profile/YAMLProfileReader.cpp
===================================================================
--- bolt/lib/Profile/YAMLProfileReader.cpp
+++ bolt/lib/Profile/YAMLProfileReader.cpp
@@ -294,9 +294,19 @@
   buildNameMaps(BC);
 
   // Preliminary assign function execution count.
-  for (auto [YamlBF, BF] : llvm::zip_equal(YamlBP.Functions, ProfileBFs))
-    if (BF)
+  for (auto [YamlBF, BF] : llvm::zip_equal(YamlBP.Functions, ProfileBFs)) {
+    if (!BF)
+      continue;
+    if (!BF->hasProfile()) {
       BF->setExecutionCount(YamlBF.ExecCount);
+    } else {
+      if (opts::Verbosity >= 1) {
+        errs() << "BOLT-WARNING: dropping duplicate profile for " << YamlBF.Name
+               << '\n';
+      }
+      BF = nullptr;
+    }
+  }
 
   return Error::success();
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D159529.556992.patch
Type: text/x-patch
Size: 2534 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230919/33dbb916/attachment.bin>


More information about the llvm-commits mailing list