Index: test/tools/gold/X86/parallel.ll =================================================================== --- test/tools/gold/X86/parallel.ll +++ test/tools/gold/X86/parallel.ll @@ -1,6 +1,6 @@ ; RUN: llvm-as -o %t.bc %s ; 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.1.5.precodegen.bc -o - | FileCheck --check-prefix=CHECK-BC1 %s ; RUN: llvm-nm %t.o0 | FileCheck --check-prefix=CHECK0 %s Index: tools/gold/gold-plugin.cpp =================================================================== --- tools/gold/gold-plugin.cpp +++ tools/gold/gold-plugin.cpp @@ -118,9 +118,11 @@ static unsigned OptLevel = 2; // Default parallelism of 0 used to indicate that user did not specify. // Actual parallelism default value depends on implementation. - // Currently, code generation defaults to no parallelism, whereas - // ThinLTO uses the hardware_concurrency as the default. + // Currently only affects ThinLTO, where the default is the + // hardware_concurrency. static unsigned Parallelism = 0; + // Default regular LTO code gen parallelism (number of partitions). + static unsigned ParallelCodeGenParallelismLevel = 1; #ifdef NDEBUG static bool DisableVerify = true; #else @@ -211,6 +213,10 @@ } else if (opt.startswith("jobs=")) { if (StringRef(opt_ + 5).getAsInteger(10, Parallelism)) 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 code gen partition level: %s", opt_ + 5); } else if (opt == "disable-verify") { DisableVerify = true; } else { @@ -690,7 +696,6 @@ static std::unique_ptr createLTO() { Config Conf; ThinBackend Backend; - unsigned ParallelCodeGenParallelismLevel = 1; Conf.CPU = options::mcpu; Conf.Options = InitTargetOptionsFromCodeGenFlags(); @@ -704,12 +709,8 @@ Conf.CGOptLevel = getCGOptLevel(); Conf.DisableVerify = options::DisableVerify; Conf.OptLevel = options::OptLevel; - if (options::Parallelism) { - if (options::thinlto) - Backend = createInProcessThinBackend(options::Parallelism); - else - ParallelCodeGenParallelismLevel = options::Parallelism; - } + if (options::Parallelism && options::thinlto) + Backend = createInProcessThinBackend(options::Parallelism); if (options::thinlto_index_only) { std::string OldPrefix, NewPrefix; getThinLTOOldAndNewPrefix(OldPrefix, NewPrefix); @@ -749,7 +750,7 @@ } return llvm::make_unique(std::move(Conf), Backend, - ParallelCodeGenParallelismLevel); + options::ParallelCodeGenParallelismLevel); } // Write empty files that may be expected by a distributed build