Skip to content

Commit b53c04a

Browse files
spupyrevspupyrev
authored and
spupyrev
committed
Reapply [ELF] Making cdsort default for function reordering (#68638)
Edited lld/ELF/Options.td to cdsort as well CDSort function reordering outperforms the existing default heuristic ( hfsort/C^3) in terms of the performance of generated binaries while being (almost) as fast. Thus, the suggestion is to change the default. The speedup is up to 1.5% perf for large front-end binaries, and can be moderate/neutral for "small" benchmarks. High-level **perf impact** on two selected binaries: clang-10 binary (built with LTO+AutoFDO/CSSPGO): wins on top of C^3 in [0.3%..0.8%] rocksDB-8 binary (built with LTO+CSSPGO): wins on top of C^3 in [0.8%..1.5%] More detailed measurements on the clang binary is at [here](https://reviews.llvm.org/D152834#4445042)
1 parent 34c0d32 commit b53c04a

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

lld/ELF/Driver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,7 @@ static void ltoValidateAllVtablesHaveTypeInfos(opt::InputArgList &args) {
10951095
}
10961096

10971097
static CGProfileSortKind getCGProfileSortKind(opt::InputArgList &args) {
1098-
StringRef s = args.getLastArgValue(OPT_call_graph_profile_sort, "hfsort");
1098+
StringRef s = args.getLastArgValue(OPT_call_graph_profile_sort, "cdsort");
10991099
if (s == "hfsort")
11001100
return CGProfileSortKind::Hfsort;
11011101
if (s == "cdsort")

lld/ELF/Options.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,9 @@ defm call_graph_ordering_file:
129129
Eq<"call-graph-ordering-file", "Layout sections to optimize the given callgraph">;
130130

131131
def call_graph_profile_sort: JJ<"call-graph-profile-sort=">,
132-
HelpText<"Reorder input sections with call graph profile using the specified algorithm (default: hfsort)">,
133-
MetaVarName<"[none,hfsort]">,
134-
Values<"none,hfsort">;
132+
HelpText<"Reorder input sections with call graph profile using the specified algorithm (default: cdsort)">,
133+
MetaVarName<"[none,hfsort,cdsort]">,
134+
Values<"none,hfsort,cdsort">;
135135
def : FF<"no-call-graph-profile-sort">, Alias<call_graph_profile_sort>, AliasArgs<["none"]>,
136136
Flags<[HelpHidden]>;
137137

lld/docs/ld.lld.1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,9 @@ may be:
128128
.It Cm none
129129
Ignore call graph profile.
130130
.It Cm hfsort
131-
Use hfsort (default).
131+
Use hfsort.
132132
.It Cm cdsort
133-
Use cdsort.
133+
Use cdsort (default).
134134
.El
135135
.Pp
136136
.It Fl -color-diagnostics Ns = Ns Ar value

lld/test/ELF/cgprofile-txt.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626
# RUN: echo "TooManyPreds10 TooManyPreds 11" >> %t.call_graph
2727
# RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph --call-graph-profile-sort=hfsort -o %t2
2828
# RUN: llvm-readobj --symbols %t2 | FileCheck %s
29-
## --call-graph-profile-sort=hfsort is the default.
30-
# RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph -o %t2b
31-
# RUN: cmp %t2 %t2b
3229

3330
# RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph --call-graph-profile-sort=cdsort -o %t2
3431
# RUN: llvm-readobj --symbols %t2 | FileCheck %s --check-prefix=CDSORT
32+
## --call-graph-profile-sort=cdsort is the default.
33+
# RUN: ld.lld -e A %t --call-graph-ordering-file %t.call_graph -o %t2b
34+
# RUN: cmp %t2 %t2b
3535

3636
# RUN: not ld.lld -e A %t --call-graph-ordering-file %t.call_graph --call-graph-profile-sort=sort \
3737
# RUN: -o /dev/null 2>&1 | FileCheck %s --check-prefix=UNKNOWN

0 commit comments

Comments
 (0)