https://github.com/jhuber6 created https://github.com/llvm/llvm-project/pull/126567
Summary: We support `nogpulib` to disable implicit libraries. In the future we will want to change the default linking of these libraries based on the user language. This patch just introduces a positive variant so now we can do `-nogpulib -gpulib` to disable it. Later patch will make the default a variable in the ROCmToolChain depending on the target languages. >From 67e0e2282b635e5824da78e4d773f6d990250602 Mon Sep 17 00:00:00 2001 From: Joseph Huber <hube...@outlook.com> Date: Mon, 10 Feb 2025 12:17:41 -0600 Subject: [PATCH] [Clang][NFC] Introduce `gpulib` positive flag for `nogpulib` Summary: We support `nogpulib` to disable implicit libraries. In the future we will want to change the default linking of these libraries based on the user language. This patch just introduces a positive variant so now we can do `-nogpulib -gpulib` to disable it. Later patch will make the default a variable in the ROCmToolChain depending on the target languages. --- clang/include/clang/Driver/Options.td | 3 +++ clang/lib/Driver/ToolChains/AMDGPU.cpp | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 4 ++-- clang/lib/Driver/ToolChains/Clang.cpp | 5 +++-- clang/lib/Driver/ToolChains/CommonArgs.cpp | 3 ++- clang/lib/Driver/ToolChains/Cuda.cpp | 5 +++-- clang/lib/Driver/ToolChains/Flang.cpp | 2 +- clang/lib/Driver/ToolChains/HIPAMD.cpp | 2 +- clang/lib/Driver/ToolChains/HIPSPV.cpp | 2 +- clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp | 2 +- clang/test/Driver/amdgpu-openmp-toolchain.c | 6 +++--- 11 files changed, 21 insertions(+), 15 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index c9d192a20ff1f8a..868e231a642879e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5621,6 +5621,9 @@ def : Flag<["-"], "nocudainc">, Alias<nogpuinc>; def nogpulib : Flag<["-"], "nogpulib">, MarshallingInfoFlag<LangOpts<"NoGPULib">>, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, HelpText<"Do not link device library for CUDA/HIP device compilation">; +def gpulib : Flag<["-"], "gpulib">, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, + HelpText<"Link device libraries for GPU device compilation">; def : Flag<["-"], "nocudalib">, Alias<nogpulib>; def gpulibc : Flag<["-"], "gpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, HelpText<"Link the LLVM C Library for GPUs">; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58acdc..aff509b02704a38 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -936,7 +936,7 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_nostdlib)) return; - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) return; // Get the device name and canonicalize it diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd11..90ef5863accc486 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -49,7 +49,7 @@ void AMDGPUOpenMPToolChain::addClangTargetOptions( assert(DeviceOffloadingKind == Action::OFK_OpenMP && "Only OpenMP offloading kinds are supported."); - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) return; for (auto BCFile : getDeviceLibs(DriverArgs)) { @@ -134,7 +134,7 @@ AMDGPUOpenMPToolChain::computeMSVCVersion(const Driver *D, llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> AMDGPUOpenMPToolChain::getDeviceLibs(const llvm::opt::ArgList &Args) const { - if (Args.hasArg(options::OPT_nogpulib)) + if (!Args.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) return {}; StringRef GpuArch = getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 821407687ffa1dc..48833ae362cf06f 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7085,7 +7085,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } // Forward -nogpulib to -cc1. - if (Args.hasArg(options::OPT_nogpulib)) + if (!Args.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) CmdArgs.push_back("-nogpulib"); if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) { @@ -9297,7 +9297,8 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("--save-temps"); // Pass in the C library for GPUs if present and not disabled. - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_r, options::OPT_nogpulib, + if (Args.hasFlag(options::OPT_gpulib, OPT_nogpulib, true) && + !Args.hasArg(options::OPT_nostdlib, options::OPT_r, options::OPT_nodefaultlibs, options::OPT_nolibc, options::OPT_nogpulibc)) { forAllAssociatedToolChains(C, JA, getToolChain(), [&](const ToolChain &TC) { diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 61917db4d780d50..fc6660324e7fc8a 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1289,7 +1289,8 @@ bool tools::addOpenMPRuntime(const Compilation &C, ArgStringList &CmdArgs, if (IsOffloadingHost) CmdArgs.push_back("-lomptarget"); - if (IsOffloadingHost && !Args.hasArg(options::OPT_nogpulib)) + if (IsOffloadingHost && + Args.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) CmdArgs.push_back("-lomptarget.devicertl"); addArchSpecificRPath(TC, Args, CmdArgs); diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index c7d5893085080fb..0113c7d40779761 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -196,7 +196,8 @@ CudaInstallationDetector::CudaInstallationDetector( Candidates.emplace_back(D.SysRoot + "/usr/lib/cuda"); } - bool NoCudaLib = Args.hasArg(options::OPT_nogpulib); + bool NoCudaLib = + !Args.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true); for (const auto &Candidate : Candidates) { InstallPath = Candidate.Path; @@ -876,7 +877,7 @@ void CudaToolChain::addClangTargetOptions( options::OPT_fno_cuda_short_ptr, false)) CC1Args.append({"-mllvm", "--nvptx-short-ptr"}); - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) return; if (DeviceOffloadingKind == Action::OFK_OpenMP && diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 591003f56e8bbb9..848944c2d98b17c 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -557,7 +557,7 @@ void Flang::addOffloadOptions(Compilation &C, const InputInfoList &Inputs, CmdArgs.push_back("-fopenmp-assume-no-thread-state"); if (Args.hasArg(options::OPT_fopenmp_assume_no_nested_parallelism)) CmdArgs.push_back("-fopenmp-assume-no-nested-parallelism"); - if (Args.hasArg(options::OPT_nogpulib)) + if (!Args.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) CmdArgs.push_back("-nogpulib"); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index 0e50eddd6b3d293..d781a7ffd2ce56e 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -352,7 +352,7 @@ VersionTuple HIPAMDToolChain::computeMSVCVersion(const Driver *D, llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPAMDToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const { llvm::SmallVector<BitCodeLibraryInfo, 12> BCLibs; - if (DriverArgs.hasArg(options::OPT_nogpulib) || + if (!DriverArgs.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true) || getGPUArch(DriverArgs) == "amdgcnspirv") return {}; ArgStringList LibraryPaths; diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp index bdbcf9109129dd2..c45f027b095e88e 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.cpp +++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -204,7 +204,7 @@ void HIPSPVToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPSPVToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const { llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> BCLibs; - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) return {}; ArgStringList LibraryPaths; diff --git a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp index 1f27245e2839cd5..27672714655e8f5 100644 --- a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp @@ -27,7 +27,7 @@ void SPIRVOpenMPToolChain::addClangTargetOptions( if (DeviceOffloadingKind != Action::OFK_OpenMP) return; - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_gpulib, options::OPT_nogpulib, true)) return; addOpenMPDeviceRTL(getDriver(), DriverArgs, CC1Args, "", getTriple(), HostTC); } diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c index b3784537cb8367b..6ca9f88cf4e16ae 100644 --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -52,14 +52,14 @@ // CHECK-EMIT-LLVM-IR: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-emit-llvm" // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 \ -// RUN: --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode -fopenmp-new-driver %s 2>&1 | \ +// RUN: -nogpulib -gpulib --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s 2>&1 | \ // RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE // CHECK-LIB-DEVICE: "-cc1" {{.*}}ocml.bc"{{.*}}oclc_daz_opt_on.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_correctly_rounded_sqrt_on.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc" // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 -nogpulib \ -// RUN: --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode -fopenmp-new-driver %s 2>&1 | \ +// RUN: -gpulib -nogpulib --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s 2>&1 | \ // RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE-NOGPULIB -// CHECK-LIB-DEVICE-NOGPULIB-NOT: "-cc1" {{.*}}ocml.bc"{{.*}}ockl.bc"{{.*}}oclc_daz_opt_on.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_correctly_rounded_sqrt_on.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc" +// CHECK-LIB-DEVICE-NOGPULIB-NOT: "-cc1" {{.*}}ocml.bc"{{.*}}oclc_daz_opt_on.bc"{{.*}}oclc_unsafe_math_off.bc"{{.*}}oclc_finite_only_off.bc"{{.*}}oclc_correctly_rounded_sqrt_on.bc"{{.*}}oclc_wavefrontsize64_on.bc"{{.*}}oclc_isa_version_803.bc" // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a:sramecc-:xnack+ \ // RUN: -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-TARGET-ID _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits