[PATCH] D59311: [ELF] Print symbols ordered by profiled guided section layout with verbose.

Tiancong Wang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 13 10:43:29 PDT 2019


tcwang created this revision.
tcwang added reviewers: ruiu, george.burgess.iv, pcc.
Herald added subscribers: llvm-commits, MaskRay, arichardson, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.

In D36531 <https://reviews.llvm.org/D36531>, Call-Chain Clustering (C3) heuristic is implemented with
option --call-graph-ordering-file <file>. This patch prints out the
symbols ordered by the heuristics, if user passes --verbose to LLD.
The symbols printout is helpful to those who want to understand the
heuristics and want to reproduce the ordering with --symbol-ordering-file
in later pass.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D59311

Files:
  lld/ELF/CallGraphSort.cpp
  lld/test/ELF/cgprofile-print.s


Index: lld/test/ELF/cgprofile-print.s
===================================================================
--- /dev/null
+++ lld/test/ELF/cgprofile-print.s
@@ -0,0 +1,46 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: echo "A B 5" > %t.call_graph
+# RUN: echo "B C 50" >> %t.call_graph
+# RUN: echo "C D 40" >> %t.call_graph
+# RUN: echo "D B 10" >> %t.call_graph
+# RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph -o %t2 --verbose | FileCheck %s --check-prefix=VERBOSE
+# RUN: llvm-readobj -symbols %t2 | FileCheck %s
+
+# CHECK:      Name: A
+# CHECK-NEXT: Value: 0x201003
+# CHECK:      Name: B
+# CHECK-NEXT: Value: 0x201000
+# CHECK:      Name: C
+# CHECK-NEXT: Value: 0x201001
+# CHECK:      Name: D
+# CHECK-NEXT: Value: 0x201002
+
+.section    .text.A,"ax", at progbits
+.globl  A
+A:
+ nop
+
+.section    .text.B,"ax", at progbits
+.globl  B
+B:
+ nop
+
+.section    .text.C,"ax", at progbits
+.globl  C
+C:
+ nop
+
+.section    .text.D,"ax", at progbits
+.globl  D
+D:
+ nop
+
+
+# VERBOSE: ******** Symbols ordered by call-chain clustering ********
+# VERBOSE-NEXT: .text.B
+# VERBOSE-NEXT: .text.C
+# VERBOSE-NEXT: .text.D
+# VERBOSE-NEXT: .text.A
+# VERBOSE-NEXT: **********************************************************
Index: lld/ELF/CallGraphSort.cpp
===================================================================
--- lld/ELF/CallGraphSort.cpp
+++ lld/ELF/CallGraphSort.cpp
@@ -226,6 +226,17 @@
     for (int SecIndex : C.Sections)
       OrderMap[Sections[SecIndex]] = CurOrder++;
 
+  if (errorHandler().Verbose) {
+    // If user passes --verbose to LLD , print out the symbols ordered by C3.
+    outs() << "******** Symbols ordered by call-chain clustering ********\n";
+    // Print the symbols ordered by C3, in the order of increasing CurOrder
+    // Instead of sorting all the OrderMap, just repeat the loops above.
+    for (const Cluster &C : Clusters)
+      for (int SecIndex : C.Sections)
+        outs() << Sections[SecIndex]->Name << "\n";
+    outs() << "**********************************************************\n";
+  }
+
   return OrderMap;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59311.190449.patch
Type: text/x-patch
Size: 2141 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190313/d59e88c1/attachment.bin>


More information about the llvm-commits mailing list