Author: Yaxun (Sam) Liu Date: 2025-04-14T17:08:28-04:00 New Revision: 9332f1ea57fb7486c79003eaff43d27bfedea1af
URL: https://github.com/llvm/llvm-project/commit/9332f1ea57fb7486c79003eaff43d27bfedea1af DIFF: https://github.com/llvm/llvm-project/commit/9332f1ea57fb7486c79003eaff43d27bfedea1af.diff LOG: [Clang] add option --offload-jobs=N (#135229) for specifying number of threads for clang-linker-wrapper. Added: Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/hip-options.hip Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index a9f3912e0773a..c9d2bc5e81976 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 to use for device offloading tasks" + " during compilation.">; + 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..a330972045550 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1031,6 +1031,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 +9362,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