Skip to content

Commit c9e2239

Browse files
committed
[lld][MachO] rename to bp-* options for SectionOrderer in MachO
1 parent 9730760 commit c9e2239

7 files changed

+102
-41
lines changed

lld/MachO/Config.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,12 @@ struct Configuration {
222222
bool callGraphProfileSort = false;
223223
llvm::StringRef printSymbolOrder;
224224

225-
llvm::StringRef irpgoProfileSortProfilePath;
226-
bool compressionSortStartupFunctions = false;
227-
bool functionOrderForCompression = false;
228-
bool dataOrderForCompression = false;
229-
bool verboseBpSectionOrderer = false;
225+
llvm::StringRef irpgoProfilePath;
226+
bool bpStartupFunctionSort = false;
227+
bool bpCompressionSortStartupFunctions = false;
228+
bool bpFunctionOrderForCompression = false;
229+
bool bpDataOrderForCompression = false;
230+
bool bpVerboseSectionOrderer = false;
230231

231232
SectionRenameMap sectionRenameMap;
232233
SegmentRenameMap segmentRenameMap;

lld/MachO/Driver.cpp

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,34 +1838,55 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
18381838
if (const Arg *arg = args.getLastArgNoClaim(OPT_call_graph_profile_sort))
18391839
error(firstArgStr + " is incompatible with " + arg->getSpelling());
18401840
};
1841+
if (args.hasArg(OPT_irpgo_profile_sort) ||
1842+
args.hasArg(OPT_irpgo_profile_sort_eq))
1843+
warn("--irpgo-profile-sort is deprecated. Please use "
1844+
"--bp-startup-sort=function");
1845+
if (const Arg *arg = args.getLastArg(OPT_irpgo_profile_eq))
1846+
config->irpgoProfilePath = arg->getValue();
1847+
18411848
if (const Arg *arg = args.getLastArg(OPT_irpgo_profile_sort)) {
1842-
config->irpgoProfileSortProfilePath = arg->getValue();
1849+
config->irpgoProfilePath = arg->getValue();
1850+
config->bpStartupFunctionSort = true;
18431851
IncompatWithCGSort(arg->getSpelling());
18441852
}
1845-
config->compressionSortStartupFunctions =
1846-
args.hasFlag(OPT_compression_sort_startup_functions,
1847-
OPT_no_compression_sort_startup_functions, false);
1848-
if (config->irpgoProfileSortProfilePath.empty() &&
1849-
config->compressionSortStartupFunctions)
1850-
error("--compression-sort-startup-functions must be used with "
1851-
"--irpgo-profile-sort");
1852-
if (const Arg *arg = args.getLastArg(OPT_compression_sort)) {
1853+
config->bpCompressionSortStartupFunctions =
1854+
args.hasFlag(OPT_bp_compression_sort_startup_functions,
1855+
OPT_no_bp_compression_sort_startup_functions, false);
1856+
if (const Arg *arg = args.getLastArg(OPT_bp_startup_sort)) {
1857+
StringRef startupSortStr = arg->getValue();
1858+
if (startupSortStr == "function") {
1859+
config->bpStartupFunctionSort = true;
1860+
} else if (startupSortStr != "none") {
1861+
error("unknown value `" + startupSortStr + "` for " + arg->getSpelling());
1862+
}
1863+
if (startupSortStr != "none")
1864+
IncompatWithCGSort(arg->getSpelling());
1865+
}
1866+
if (!config->bpStartupFunctionSort &&
1867+
config->bpCompressionSortStartupFunctions)
1868+
error("--bp-compression-sort-startup-functions must be used with "
1869+
"--bp-startup-sort=function");
1870+
if (config->irpgoProfilePath.empty() && config->bpStartupFunctionSort)
1871+
error("--bp-startup-sort=function must be used with "
1872+
"--irpgo-profile");
1873+
if (const Arg *arg = args.getLastArg(OPT_bp_compression_sort)) {
18531874
StringRef compressionSortStr = arg->getValue();
18541875
if (compressionSortStr == "function") {
1855-
config->functionOrderForCompression = true;
1876+
config->bpFunctionOrderForCompression = true;
18561877
} else if (compressionSortStr == "data") {
1857-
config->dataOrderForCompression = true;
1878+
config->bpDataOrderForCompression = true;
18581879
} else if (compressionSortStr == "both") {
1859-
config->functionOrderForCompression = true;
1860-
config->dataOrderForCompression = true;
1880+
config->bpFunctionOrderForCompression = true;
1881+
config->bpDataOrderForCompression = true;
18611882
} else if (compressionSortStr != "none") {
18621883
error("unknown value `" + compressionSortStr + "` for " +
18631884
arg->getSpelling());
18641885
}
18651886
if (compressionSortStr != "none")
18661887
IncompatWithCGSort(arg->getSpelling());
18671888
}
1868-
config->verboseBpSectionOrderer = args.hasArg(OPT_verbose_bp_section_orderer);
1889+
config->bpVerboseSectionOrderer = args.hasArg(OPT_verbose_bp_section_orderer);
18691890

18701891
for (const Arg *arg : args.filtered(OPT_alias)) {
18711892
config->aliasedSymbols.push_back(

lld/MachO/Options.td

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,19 +126,34 @@ def no_call_graph_profile_sort : Flag<["--"], "no-call-graph-profile-sort">,
126126
def print_symbol_order_eq: Joined<["--"], "print-symbol-order=">,
127127
HelpText<"Print a symbol order specified by --call-graph-profile-sort into the specified file">,
128128
Group<grp_lld>;
129+
def irpgo_profile_eq: Joined<["--"], "irpgo-profile=">,
130+
HelpText<"Read the IRPGO profile for use with -bp-startup-sort and other profile-guided optimizations">,
131+
Group<grp_lld>;
132+
def bp_startup_sort: Joined<["--"], "bp-startup-sort=">,
133+
MetaVarName<"[none,function]">,
134+
HelpText<"Order sections based on profile data to improve startup time">,
135+
Group<grp_lld>;
136+
def bp_compression_sort_startup_functions: Flag<["--"], "bp-compression-sort-startup-functions">,
137+
HelpText<"Order startup functions to improve compressed size in addition to startup time">,
138+
Group<grp_lld>;
139+
def no_bp_compression_sort_startup_functions: Flag<["--"], "no-bp-compression-sort-startup-functions">,
140+
HelpText<"Do not order startup function for compression">, Group<grp_lld>;
141+
def bp_compression_sort: Joined<["--"], "bp-compression-sort=">,
142+
MetaVarName<"[none,function,data,both]">,
143+
HelpText<"Order sections to improve compressed size">, Group<grp_lld>;
129144
def irpgo_profile_sort: Separate<["--"], "irpgo-profile-sort">, Group<grp_lld>;
130145
def irpgo_profile_sort_eq: Joined<["--"], "irpgo-profile-sort=">,
131146
Alias<!cast<Separate>(irpgo_profile_sort)>, MetaVarName<"<profile>">,
132-
HelpText<"Read the IRPGO profile at <profile> to order sections to improve startup time">,
147+
HelpText<"Deprecated. Please use --irpgo-profile and --bp-startup-sort=function">,
133148
Group<grp_lld>;
134149
def compression_sort_startup_functions: Flag<["--"], "compression-sort-startup-functions">,
135-
HelpText<"Order startup functions to improve compressed size in addition to startup time">,
136-
Group<grp_lld>;
150+
Alias<!cast<Flag>(bp_compression_sort_startup_functions)>, HelpText<"Deprecated. Please use --bp-compression-sort-startup-functions">, Group<grp_lld>;
137151
def no_compression_sort_startup_functions: Flag<["--"], "no-compression-sort-startup-functions">,
138-
HelpText<"Do not order startup function for compression">, Group<grp_lld>;
152+
Alias<!cast<Flag>(no_bp_compression_sort_startup_functions)>, HelpText<"Deprecated. Please use --no-bp-compression-sort-startup-functions">, Group<grp_lld>;
139153
def compression_sort: Joined<["--"], "compression-sort=">,
140154
MetaVarName<"[none,function,data,both]">,
141-
HelpText<"Order sections to improve compressed size">, Group<grp_lld>;
155+
Alias<!cast<Joined>(bp_compression_sort)>,
156+
HelpText<"Deprecated. Please use --bp-compression-sort=">, Group<grp_lld>;
142157
def verbose_bp_section_orderer: Flag<["--"], "verbose-bp-section-orderer">,
143158
HelpText<"Print information on how many sections were ordered by balanced partitioning and a measure of the expected number of page faults">,
144159
Group<grp_lld>;

lld/MachO/SectionPriorities.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -353,14 +353,16 @@ void macho::PriorityBuilder::parseOrderFile(StringRef path) {
353353
DenseMap<const InputSection *, size_t>
354354
macho::PriorityBuilder::buildInputSectionPriorities() {
355355
DenseMap<const InputSection *, size_t> sectionPriorities;
356-
if (!config->irpgoProfileSortProfilePath.empty() ||
357-
config->functionOrderForCompression || config->dataOrderForCompression) {
356+
if (config->bpStartupFunctionSort || config->bpFunctionOrderForCompression ||
357+
config->bpDataOrderForCompression) {
358358
TimeTraceScope timeScope("Balanced Partitioning Section Orderer");
359359
sectionPriorities = runBalancedPartitioning(
360-
highestAvailablePriority, config->irpgoProfileSortProfilePath,
361-
config->functionOrderForCompression, config->dataOrderForCompression,
362-
config->compressionSortStartupFunctions,
363-
config->verboseBpSectionOrderer);
360+
highestAvailablePriority,
361+
config->bpStartupFunctionSort ? config->irpgoProfilePath : "",
362+
config->bpFunctionOrderForCompression,
363+
config->bpDataOrderForCompression,
364+
config->bpCompressionSortStartupFunctions,
365+
config->bpVerboseSectionOrderer);
364366
} else if (config->callGraphProfileSort) {
365367
// Sort sections by the profile data provided by __LLVM,__cg_profile
366368
// sections.
Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
1-
# RUN: not %lld -o /dev/null --irpgo-profile-sort %s --call-graph-profile-sort 2>&1 | FileCheck %s --check-prefix=IRPGO-ERR
2-
# RUN: not %lld -o /dev/null --irpgo-profile-sort=%s --call-graph-profile-sort 2>&1 | FileCheck %s --check-prefix=IRPGO-ERR
1+
# RUN: not %no-fatal-warnings-lld -o /dev/null --irpgo-profile-sort %s --call-graph-profile-sort 2>&1 | FileCheck %s --check-prefix=IRPGO-ERR
2+
# RUN: not %no-fatal-warnings-lld -o /dev/null --irpgo-profile-sort=%s --call-graph-profile-sort 2>&1 | FileCheck %s --check-prefix=IRPGO-ERR
33
# IRPGO-ERR: --irpgo-profile-sort is incompatible with --call-graph-profile-sort
44

55
# RUN: not %lld -o /dev/null --compression-sort=function --call-graph-profile-sort %s 2>&1 | FileCheck %s --check-prefix=COMPRESSION-ERR
6-
# COMPRESSION-ERR: --compression-sort= is incompatible with --call-graph-profile-sort
6+
# RUN: not %lld -o /dev/null --bp-compression-sort=function --call-graph-profile-sort %s 2>&1 | FileCheck %s --check-prefix=COMPRESSION-ERR
7+
# COMPRESSION-ERR: --bp-compression-sort= is incompatible with --call-graph-profile-sort
78

89
# RUN: not %lld -o /dev/null --compression-sort=malformed 2>&1 | FileCheck %s --check-prefix=COMPRESSION-MALFORM
9-
# COMPRESSION-MALFORM: unknown value `malformed` for --compression-sort=
10+
# RUN: not %lld -o /dev/null --bp-compression-sort=malformed 2>&1 | FileCheck %s --check-prefix=COMPRESSION-MALFORM
11+
# COMPRESSION-MALFORM: unknown value `malformed` for --bp-compression-sort=
1012

1113
# RUN: not %lld -o /dev/null --compression-sort-startup-functions 2>&1 | FileCheck %s --check-prefix=STARTUP
12-
# STARTUP: --compression-sort-startup-functions must be used with --irpgo-profile-sort
14+
# RUN: not %lld -o /dev/null --bp-compression-sort-startup-functions 2>&1 | FileCheck %s --check-prefix=STARTUP
15+
# STARTUP: --bp-compression-sort-startup-functions must be used with --bp-startup-sort=function
16+
17+
# RUN: not %lld -o /dev/null --irpgo-profile=%s --bp-startup-sort=function --call-graph-profile-sort 2>&1 | FileCheck %s --check-prefix=IRPGO-STARTUP
18+
# IRPGO-STARTUP: --bp-startup-sort= is incompatible with --call-graph-profile-sort
19+
20+
# RUN: not %lld -o /dev/null --bp-startup-sort=function 2>&1 | FileCheck %s --check-prefix=STARTUP-COMPRESSION
21+
# STARTUP-COMPRESSION: --bp-startup-sort=function must be used with --irpgo-profile

lld/test/MachO/bp-section-orderer-stress.s

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t.s -o %t.o
88
# RUN: llvm-profdata merge %t.proftext -o %t.profdata
99

10-
# RUN: %lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile-sort=%t.profdata --compression-sort-startup-functions --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order1.txt
11-
# RUN: %lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile-sort=%t.profdata --compression-sort-startup-functions --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order2.txt
10+
# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile-sort=%t.profdata --compression-sort-startup-functions --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order1.txt
11+
# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile-sort=%t.profdata --compression-sort-startup-functions --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order2.txt
1212
# RUN: diff %t.order1.txt %t.order2.txt
1313

14+
# RUN: %lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile=%t.profdata --bp-startup-sort=function --bp-compression-sort-startup-functions --bp-compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order1.txt
15+
# RUN: %lld -arch arm64 -lSystem -e _main --icf=all -o - %t.o --irpgo-profile=%t.profdata --bp-startup-sort=function --bp-compression-sort-startup-functions --bp-compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - > %t.order2.txt
16+
# RUN: diff %t.order1.txt %t.order2.txt
1417
import random
1518
import sys
1619

lld/test/MachO/bp-section-orderer.s

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/a.s -o %t/a.o
55
# RUN: llvm-profdata merge %t/a.proftext -o %t/a.profdata
66

7-
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --irpgo-profile-sort=%t/a.profdata --verbose-bp-section-orderer 2>&1 | FileCheck %s --check-prefix=STARTUP
8-
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --irpgo-profile-sort=%t/a.profdata --verbose-bp-section-orderer --icf=all --compression-sort=none 2>&1 | FileCheck %s --check-prefix=STARTUP
7+
# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --irpgo-profile-sort=%t/a.profdata --verbose-bp-section-orderer 2>&1 | FileCheck %s --check-prefix=STARTUP
8+
# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --irpgo-profile-sort=%t/a.profdata --verbose-bp-section-orderer --icf=all --compression-sort=none 2>&1 | FileCheck %s --check-prefix=STARTUP
99

10+
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --irpgo-profile=%t/a.profdata --bp-startup-sort=function --verbose-bp-section-orderer 2>&1 | FileCheck %s --check-prefix=STARTUP
11+
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --irpgo-profile=%t/a.profdata --bp-startup-sort=function --verbose-bp-section-orderer --icf=all --bp-compression-sort=none 2>&1 | FileCheck %s --check-prefix=STARTUP
1012
# STARTUP: Ordered 3 sections using balanced partitioning
1113

1214
# Check that orderfiles take precedence over BP
13-
# RUN: %lld -arch arm64 -lSystem -e _main -o - %t/a.o -order_file %t/a.orderfile --irpgo-profile-sort=%t/a.profdata | llvm-nm --numeric-sort --format=just-symbols - | FileCheck %s --check-prefix=ORDERFILE
15+
# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main -o - %t/a.o -order_file %t/a.orderfile --irpgo-profile-sort=%t/a.profdata | llvm-nm --numeric-sort --format=just-symbols - | FileCheck %s --check-prefix=ORDERFILE
1416
# RUN: %lld -arch arm64 -lSystem -e _main -o - %t/a.o -order_file %t/a.orderfile --compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - | FileCheck %s --check-prefix=ORDERFILE
1517

18+
# RUN: %lld -arch arm64 -lSystem -e _main -o - %t/a.o -order_file %t/a.orderfile --irpgo-profile=%t/a.profdata --bp-startup-sort=function | llvm-nm --numeric-sort --format=just-symbols - | FileCheck %s --check-prefix=ORDERFILE
19+
# RUN: %lld -arch arm64 -lSystem -e _main -o - %t/a.o -order_file %t/a.orderfile --bp-compression-sort=both | llvm-nm --numeric-sort --format=just-symbols - | FileCheck %s --check-prefix=ORDERFILE
20+
1621
# Functions
1722
# ORDERFILE: A
1823
# ORDERFILE: F
@@ -34,7 +39,12 @@
3439
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --compression-sort=function 2>&1 | FileCheck %s --check-prefix=COMPRESSION-FUNC
3540
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --compression-sort=data 2>&1 | FileCheck %s --check-prefix=COMPRESSION-DATA
3641
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --compression-sort=both 2>&1 | FileCheck %s --check-prefix=COMPRESSION-BOTH
37-
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --compression-sort=both --irpgo-profile-sort=%t/a.profdata 2>&1 | FileCheck %s --check-prefix=COMPRESSION-BOTH
42+
# RUN: %no-fatal-warnings-lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --compression-sort=both --irpgo-profile-sort=%t/a.profdata 2>&1 | FileCheck %s --check-prefix=COMPRESSION-BOTH
43+
44+
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --bp-compression-sort=function 2>&1 | FileCheck %s --check-prefix=COMPRESSION-FUNC
45+
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --bp-compression-sort=data 2>&1 | FileCheck %s --check-prefix=COMPRESSION-DATA
46+
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --bp-compression-sort=both 2>&1 | FileCheck %s --check-prefix=COMPRESSION-BOTH
47+
# RUN: %lld -arch arm64 -lSystem -e _main -o %t/a.out %t/a.o --verbose-bp-section-orderer --bp-compression-sort=both --irpgo-profile=%t/a.profdata --bp-startup-sort=function 2>&1 | FileCheck %s --check-prefix=COMPRESSION-BOTH
3848

3949
# COMPRESSION-FUNC: Ordered 7 sections using balanced partitioning
4050
# COMPRESSION-DATA: Ordered 7 sections using balanced partitioning

0 commit comments

Comments
 (0)