[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