-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[Clang][NFC] Introduce --offloadlib
positive flag for nogpulib
and alias to --no-offloadlib
#126567
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang @llvm/pr-subscribers-clang-driver Author: Joseph Huber (jhuber6) ChangesSummary: Later patch will make the default a variable in the ROCmToolChain Full diff: https://github.com/llvm/llvm-project/pull/126567.diff 11 Files Affected:
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
|
@llvm/pr-subscribers-backend-amdgpu Author: Joseph Huber (jhuber6) ChangesSummary: Later patch will make the default a variable in the ROCmToolChain Full diff: https://github.com/llvm/llvm-project/pull/126567.diff 11 Files Affected:
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
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that we should be able to negate the option (and, perhaps --nocudainc, as well, while we're at that)
That said, perhaps we should reconsider how we implement it.
Originally -nogpulib
was modeled after -nostdlib
. So we've got a single-dash option, and no way to undo it.
Now that we do want to undo it, perhaps we should make it a normal double-dash offloading option. and alias -nogpulib
to the negative variant of it? WDYT?
The inc flags aren't as problematic since they're only ever present on the frontend job. I'm ambivalent on changing the spelling, can do that without changing much. |
If we're adding new options, I'd prefer those to be the standard double-dash options, rather than adding a special case to the legacy-style option. Also, we still have the original |
Should be done, I just kept the same name inside the source though. |
gpulib
positive flag for nogpulib
--offloadlib
positive flag for nogpulib
and alias to --no-offloadlib
✅ With the latest revision this PR passed the C/C++ code formatter. |
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, | ||
HelpText<"Do not link device library for CUDA/HIP device compilation">; | ||
def : Flag<["-"], "nocudalib">, Alias<nogpulib>; | ||
def no_offloadlib |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we use defm offloadlib: BoolFOption to make it simpler?
@@ -7088,7 +7088,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, | |||
} | |||
|
|||
// Forward -nogpulib to -cc1. | |||
if (Args.hasArg(options::OPT_nogpulib)) | |||
if (!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true)) | |||
CmdArgs.push_back("-nogpulib"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
better use the new option
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. Offload flags
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/157/builds/19921 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/153/builds/22778 Here is the relevant piece of the build log for the reference
|
…d alias to `--no-offloadlib` (llvm#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.
…d alias to `--no-offloadlib` (llvm#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.
Summary:
We support
nogpulib
to disable implicit libraries. In the future wewill 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.