[gold] Split plugin options controlling ThinLTO and codegen parallelism.

Summary:
As suggested in D24826, use different options for ThinLTO backend
parallelism from the option controlling regular LTO code gen
parallelism. They are already split in the LTO API, and this enables
controlling them with different clang options.

Reviewers: pcc, mehdi_amini

Subscribers: dexonsmith, llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D24873

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282290 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Teresa Johnson 2016-09-23 20:35:19 +00:00
parent 5438741694
commit 468ae9f703
2 changed files with 12 additions and 11 deletions

View File

@ -1,6 +1,6 @@
; RUN: llvm-as -o %t.bc %s ; RUN: llvm-as -o %t.bc %s
; RUN: rm -f %t.opt.bc0 %t.opt.bc1 %t.o0 %t.o1 ; RUN: rm -f %t.opt.bc0 %t.opt.bc1 %t.o0 %t.o1
; RUN: env LD_PRELOAD=%llvmshlibdir/LLVMgold.so %gold -plugin %llvmshlibdir/LLVMgold.so -u foo -u bar -plugin-opt jobs=2 -plugin-opt save-temps -m elf_x86_64 -o %t %t.bc ; RUN: env LD_PRELOAD=%llvmshlibdir/LLVMgold.so %gold -plugin %llvmshlibdir/LLVMgold.so -u foo -u bar -plugin-opt lto-partitions=2 -plugin-opt save-temps -m elf_x86_64 -o %t %t.bc
; RUN: llvm-dis %t.0.5.precodegen.bc -o - | FileCheck --check-prefix=CHECK-BC0 %s ; RUN: llvm-dis %t.0.5.precodegen.bc -o - | FileCheck --check-prefix=CHECK-BC0 %s
; RUN: llvm-dis %t.1.5.precodegen.bc -o - | FileCheck --check-prefix=CHECK-BC1 %s ; RUN: llvm-dis %t.1.5.precodegen.bc -o - | FileCheck --check-prefix=CHECK-BC1 %s
; RUN: llvm-nm %t.o0 | FileCheck --check-prefix=CHECK0 %s ; RUN: llvm-nm %t.o0 | FileCheck --check-prefix=CHECK0 %s

View File

@ -118,9 +118,11 @@ namespace options {
static unsigned OptLevel = 2; static unsigned OptLevel = 2;
// Default parallelism of 0 used to indicate that user did not specify. // Default parallelism of 0 used to indicate that user did not specify.
// Actual parallelism default value depends on implementation. // Actual parallelism default value depends on implementation.
// Currently, code generation defaults to no parallelism, whereas // Currently only affects ThinLTO, where the default is the
// ThinLTO uses the hardware_concurrency as the default. // hardware_concurrency.
static unsigned Parallelism = 0; static unsigned Parallelism = 0;
// Default regular LTO codegen parallelism (number of partitions).
static unsigned ParallelCodeGenParallelismLevel = 1;
#ifdef NDEBUG #ifdef NDEBUG
static bool DisableVerify = true; static bool DisableVerify = true;
#else #else
@ -211,6 +213,10 @@ namespace options {
} else if (opt.startswith("jobs=")) { } else if (opt.startswith("jobs=")) {
if (StringRef(opt_ + 5).getAsInteger(10, Parallelism)) if (StringRef(opt_ + 5).getAsInteger(10, Parallelism))
message(LDPL_FATAL, "Invalid parallelism level: %s", opt_ + 5); message(LDPL_FATAL, "Invalid parallelism level: %s", opt_ + 5);
} else if (opt.startswith("lto-partitions=")) {
if (opt.substr(strlen("lto-partitions="))
.getAsInteger(10, ParallelCodeGenParallelismLevel))
message(LDPL_FATAL, "Invalid codegen partition level: %s", opt_ + 5);
} else if (opt == "disable-verify") { } else if (opt == "disable-verify") {
DisableVerify = true; DisableVerify = true;
} else { } else {
@ -690,7 +696,6 @@ public:
static std::unique_ptr<LTO> createLTO() { static std::unique_ptr<LTO> createLTO() {
Config Conf; Config Conf;
ThinBackend Backend; ThinBackend Backend;
unsigned ParallelCodeGenParallelismLevel = 1;
Conf.CPU = options::mcpu; Conf.CPU = options::mcpu;
Conf.Options = InitTargetOptionsFromCodeGenFlags(); Conf.Options = InitTargetOptionsFromCodeGenFlags();
@ -704,12 +709,8 @@ static std::unique_ptr<LTO> createLTO() {
Conf.CGOptLevel = getCGOptLevel(); Conf.CGOptLevel = getCGOptLevel();
Conf.DisableVerify = options::DisableVerify; Conf.DisableVerify = options::DisableVerify;
Conf.OptLevel = options::OptLevel; Conf.OptLevel = options::OptLevel;
if (options::Parallelism) { if (options::Parallelism)
if (options::thinlto) Backend = createInProcessThinBackend(options::Parallelism);
Backend = createInProcessThinBackend(options::Parallelism);
else
ParallelCodeGenParallelismLevel = options::Parallelism;
}
if (options::thinlto_index_only) { if (options::thinlto_index_only) {
std::string OldPrefix, NewPrefix; std::string OldPrefix, NewPrefix;
getThinLTOOldAndNewPrefix(OldPrefix, NewPrefix); getThinLTOOldAndNewPrefix(OldPrefix, NewPrefix);
@ -749,7 +750,7 @@ static std::unique_ptr<LTO> createLTO() {
} }
return llvm::make_unique<LTO>(std::move(Conf), Backend, return llvm::make_unique<LTO>(std::move(Conf), Backend,
ParallelCodeGenParallelismLevel); options::ParallelCodeGenParallelismLevel);
} }
// Write empty files that may be expected by a distributed build // Write empty files that may be expected by a distributed build