https://github.com/yxsamliu updated https://github.com/llvm/llvm-project/pull/135229
>From 8d66eac07fa9b4d052b821f1f33783a3e5a1af34 Mon Sep 17 00:00:00 2001 From: "Yaxun (Sam) Liu" <yaxun....@amd.com> Date: Thu, 10 Apr 2025 14:14:47 -0400 Subject: [PATCH] [Clang] add option --offload-jobs=N for specifying number of threads for clang-linker-wrapper. --- clang/include/clang/Driver/Options.td | 4 ++++ clang/lib/Driver/ToolChains/Clang.cpp | 14 ++++++++++++++ clang/test/Driver/hip-options.hip | 17 +++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 2242269c30b0f..df067b61a71a2 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1234,6 +1234,10 @@ def offload_compression_level_EQ : Joined<["--"], "offload-compression-level=">, Flags<[HelpHidden]>, HelpText<"Compression level for offload device binaries (HIP only)">; +def offload_jobs_EQ : Joined<["--"], "offload-jobs=">, + HelpText<"Specify the number of threads for the clang-linker-wrapper" + " (--wrapper-jobs=N)">; + defm offload_via_llvm : BoolFOption<"offload-via-llvm", LangOpts<"OffloadViaLLVM">, DefaultFalse, PosFlag<SetTrue, [], [ClangOption, CC1Option], "Use">, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 1de83baacff93..5155a7b089a9a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -57,6 +57,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/Process.h" +#include "llvm/Support/ThreadPool.h" #include "llvm/Support/YAMLParser.h" #include "llvm/TargetParser/AArch64TargetParser.h" #include "llvm/TargetParser/ARMTargetParserCommon.h" @@ -1031,6 +1032,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, if (JA.isOffloading(Action::OFK_HIP)) { Args.ClaimAllArgs(options::OPT_offload_compress); Args.ClaimAllArgs(options::OPT_no_offload_compress); + Args.ClaimAllArgs(options::OPT_offload_jobs_EQ); } bool HasTarget = false; @@ -9361,6 +9363,18 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(LinkArg); addOffloadCompressArgs(Args, CmdArgs); + + if (Arg *A = Args.getLastArg(options::OPT_offload_jobs_EQ)) { + int NumThreads; + if (StringRef(A->getValue()).getAsInteger(10, NumThreads) || + NumThreads <= 0) + C.getDriver().Diag(diag::err_drv_invalid_int_value) + << A->getAsString(Args) << A->getValue(); + else + CmdArgs.push_back( + Args.MakeArgString("--wrapper-jobs=" + Twine(NumThreads))); + } + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("clang-linker-wrapper")); diff --git a/clang/test/Driver/hip-options.hip b/clang/test/Driver/hip-options.hip index 29d23c1b6c8d9..a07dca3638565 100644 --- a/clang/test/Driver/hip-options.hip +++ b/clang/test/Driver/hip-options.hip @@ -243,6 +243,19 @@ // NO-WARN-ATOMIC-NOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-Werror=atomic-alignment" // NO-WARN-ATOMIC-NOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-Wno-error=atomic-alignment" -// Check --offload-compress does not cause warning. +// Check --offload-compress --offload-jobs=N does not cause warning. // RUN: %clang -### -Werror --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \ -// RUN: --offload-arch=gfx1100 --offload-compress --offload-host-only -M %s +// RUN: --offload-arch=gfx1100 --offload-compress --offload-host-only -M %s \ +// RUN: --offload-jobs=4 + +// Check --offload-jobs=N option. + +// RUN: %clang -### -Werror --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \ +// RUN: --offload-arch=gfx1100 --offload-new-driver --offload-jobs=4 %s 2>&1 | \ +// RUN: FileCheck -check-prefix=JOBS %s +// JOBS: clang-linker-wrapper{{.*}} "--wrapper-jobs=4" + +// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \ +// RUN: --offload-arch=gfx1100 --offload-new-driver --offload-jobs=0x4 %s 2>&1 | \ +// RUN: FileCheck -check-prefix=INVJOBS %s +// INVJOBS: clang: error: invalid integral value '0x4' in '--offload-jobs=0x4' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits