Author: Joseph Huber Date: 2025-02-13T07:59:08-06:00 New Revision: f6e3d33c009cada0437c11d3fd1beace74c5dcfa
URL: https://github.com/llvm/llvm-project/commit/f6e3d33c009cada0437c11d3fd1beace74c5dcfa DIFF: https://github.com/llvm/llvm-project/commit/f6e3d33c009cada0437c11d3fd1beace74c5dcfa.diff LOG: [Clang][NFC] Introduce `--offloadlib` positive flag for `nogpulib` and alias to `--no-offloadlib` (#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. Added: Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/AMDGPU.cpp clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp clang/lib/Driver/ToolChains/Cuda.cpp clang/lib/Driver/ToolChains/Flang.cpp clang/lib/Driver/ToolChains/HIPAMD.cpp clang/lib/Driver/ToolChains/HIPSPV.cpp clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp clang/test/Driver/amdgpu-openmp-toolchain.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 618815db28434..5ad187926e710 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5618,10 +5618,18 @@ def nogpuinc : Flag<["-"], "nogpuinc">, Group<IncludePath_Group>, def nohipwrapperinc : Flag<["-"], "nohipwrapperinc">, Group<IncludePath_Group>, HelpText<"Do not include the default HIP wrapper headers and include paths">; 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 : Flag<["-"], "nocudalib">, Alias<nogpulib>; +def no_offloadlib + : Flag<["--"], "no-offloadlib">, + MarshallingInfoFlag<LangOpts<"NoGPULib">>, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, + HelpText<"Do not link device library for CUDA/HIP device compilation">; +def offloadlib : Flag<["--"], "offloadlib">, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, + HelpText<"Link device libraries for GPU device compilation">; +def : Flag<["-"], "nogpulib">, + Alias<no_offloadlib>, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; +def : Flag<["-"], "nocudalib">, Alias<no_offloadlib>; def gpulibc : Flag<["-"], "gpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, HelpText<"Link the LLVM C Library for GPUs">; def nogpulibc : Flag<["-"], "nogpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 8d5cb91ebad9a..6a35a2feabc9b 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -936,7 +936,8 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_nostdlib)) return; - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, + 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 85247f7bd5a9e..fe8bfb361e5a6 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -49,7 +49,8 @@ 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_offloadlib, options::OPT_no_offloadlib, + true)) return; for (auto BCFile : getDeviceLibs(DriverArgs)) { @@ -141,7 +142,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_offloadlib, options::OPT_no_offloadlib, true)) return {}; StringRef GpuArch = getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 8fe76de7ff0f0..55ec3db0ee994 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7117,9 +7117,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } } - // Forward -nogpulib to -cc1. - if (Args.hasArg(options::OPT_nogpulib)) - CmdArgs.push_back("-nogpulib"); + // Forward --no-offloadlib to -cc1. + if (!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true)) + CmdArgs.push_back("--no-offloadlib"); if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) { CmdArgs.push_back( @@ -9319,7 +9319,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_offloadlib, OPT_no_offloadlib, 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 9a4d3f55c911c..2d01943ca1ac4 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_offloadlib, options::OPT_no_offloadlib, 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 d6487d4bc274d..06b0b0913d24e 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_offloadlib, options::OPT_no_offloadlib, true); for (const auto &Candidate : Candidates) { InstallPath = Candidate.Path; @@ -865,7 +866,8 @@ 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_offloadlib, options::OPT_no_offloadlib, + true)) return; if (DeviceOffloadingKind == Action::OFK_OpenMP && diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 591003f56e8bb..2b7ce6d29bbcd 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -557,7 +557,8 @@ 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_offloadlib, options::OPT_no_offloadlib, + true)) CmdArgs.push_back("-nogpulib"); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index 0e50eddd6b3d2..271626ed54aed 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -352,7 +352,8 @@ 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_offloadlib, options::OPT_no_offloadlib, + true) || getGPUArch(DriverArgs) == "amdgcnspirv") return {}; ArgStringList LibraryPaths; diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp index bdbcf9109129d..bbde5c047c3f9 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.cpp +++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -204,7 +204,8 @@ 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_offloadlib, options::OPT_no_offloadlib, + true)) return {}; ArgStringList LibraryPaths; diff --git a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp index 1f27245e2839c..a688fd8d9fb50 100644 --- a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp @@ -27,7 +27,8 @@ void SPIRVOpenMPToolChain::addClangTargetOptions( if (DeviceOffloadingKind != Action::OFK_OpenMP) return; - if (DriverArgs.hasArg(options::OPT_nogpulib)) + if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, + 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 b3784537cb836..1091e6e372ac0 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: --no-offloadlib --offloadlib --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: --offloadlib --no-offloadlib --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