[PATCH] D152338: [BOLT] Handle recursive calls as inter-branches in DataAggregator

Amir Ayupov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 6 22:11:28 PDT 2023


Amir created this revision.
Amir added a reviewer: bolt.
Herald added a reviewer: rafauler.
Herald added subscribers: treapster, ayermolo.
Herald added a reviewer: maksfb.
Herald added a project: All.
Amir requested review of this revision.
Herald added subscribers: llvm-commits, yota9.
Herald added a project: LLVM.

Align yaml and fdata profiles by applying the same treatment to recursive
calls (direct, indirect, tail). fdata profile increments entry count when
handling recursive calls. Make perf/pre-aggregated perf reader (DataAggregator)
do the same.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D152338

Files:
  bolt/lib/Profile/DataAggregator.cpp
  bolt/test/X86/Inputs/pre-aggregated.txt
  bolt/test/X86/pre-aggregated-perf.test


Index: bolt/test/X86/pre-aggregated-perf.test
===================================================================
--- bolt/test/X86/pre-aggregated-perf.test
+++ bolt/test/X86/pre-aggregated-perf.test
@@ -43,6 +43,11 @@
 PERF2BOLT: 1 usqrt 3d 1 usqrt 3f 0 22
 PERF2BOLT: 1 usqrt a 1 usqrt 10 0 22
 
+NEWFORMAT:  - name:            'frame_dummy/1'
+NEWFORMAT:    fid:             3
+NEWFORMAT:    hash:            0x24496F7F9594E89F
+NEWFORMAT:    exec:            1
+
 NEWFORMAT:  - name:            usqrt
 NEWFORMAT:    fid:             7
 NEWFORMAT:    exec:            0
Index: bolt/test/X86/Inputs/pre-aggregated.txt
===================================================================
--- bolt/test/X86/Inputs/pre-aggregated.txt
+++ bolt/test/X86/Inputs/pre-aggregated.txt
@@ -6,3 +6,4 @@
 B 4011a0 4011a9 33 4
 B 4011ad 401180 58 0
 F 401170 4011b2 22
+B 400dae 400d90 1 0
Index: bolt/lib/Profile/DataAggregator.cpp
===================================================================
--- bolt/lib/Profile/DataAggregator.cpp
+++ bolt/lib/Profile/DataAggregator.cpp
@@ -777,7 +777,8 @@
   if (!FromFunc && !ToFunc)
     return false;
 
-  if (FromFunc == ToFunc) {
+  // Treat recursive control transfers as inter-branches.
+  if (FromFunc == ToFunc && (To != ToFunc->getAddress())) {
     recordBranch(*FromFunc, From - FromFunc->getAddress(),
                  To - FromFunc->getAddress(), Count, Mispreds);
     return doIntraBranch(*FromFunc, From, To, Count, Mispreds);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152338.529157.patch
Type: text/x-patch
Size: 1477 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230607/63f0800e/attachment.bin>


More information about the llvm-commits mailing list