Skip to content

Commit f6e3d33

Browse files
authored
[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.
1 parent 27e78e6 commit f6e3d33

File tree

11 files changed

+39
-21
lines changed

11 files changed

+39
-21
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5618,10 +5618,18 @@ def nogpuinc : Flag<["-"], "nogpuinc">, Group<IncludePath_Group>,
56185618
def nohipwrapperinc : Flag<["-"], "nohipwrapperinc">, Group<IncludePath_Group>,
56195619
HelpText<"Do not include the default HIP wrapper headers and include paths">;
56205620
def : Flag<["-"], "nocudainc">, Alias<nogpuinc>;
5621-
def nogpulib : Flag<["-"], "nogpulib">, MarshallingInfoFlag<LangOpts<"NoGPULib">>,
5622-
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
5623-
HelpText<"Do not link device library for CUDA/HIP device compilation">;
5624-
def : Flag<["-"], "nocudalib">, Alias<nogpulib>;
5621+
def no_offloadlib
5622+
: Flag<["--"], "no-offloadlib">,
5623+
MarshallingInfoFlag<LangOpts<"NoGPULib">>,
5624+
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
5625+
HelpText<"Do not link device library for CUDA/HIP device compilation">;
5626+
def offloadlib : Flag<["--"], "offloadlib">,
5627+
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
5628+
HelpText<"Link device libraries for GPU device compilation">;
5629+
def : Flag<["-"], "nogpulib">,
5630+
Alias<no_offloadlib>,
5631+
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>;
5632+
def : Flag<["-"], "nocudalib">, Alias<no_offloadlib>;
56255633
def gpulibc : Flag<["-"], "gpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
56265634
HelpText<"Link the LLVM C Library for GPUs">;
56275635
def nogpulibc : Flag<["-"], "nogpulibc">, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>;

clang/lib/Driver/ToolChains/AMDGPU.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,8 @@ void ROCMToolChain::addClangTargetOptions(
936936
DriverArgs.hasArg(options::OPT_nostdlib))
937937
return;
938938

939-
if (DriverArgs.hasArg(options::OPT_nogpulib))
939+
if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
940+
true))
940941
return;
941942

942943
// Get the device name and canonicalize it

clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ void AMDGPUOpenMPToolChain::addClangTargetOptions(
4949
assert(DeviceOffloadingKind == Action::OFK_OpenMP &&
5050
"Only OpenMP offloading kinds are supported.");
5151

52-
if (DriverArgs.hasArg(options::OPT_nogpulib))
52+
if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
53+
true))
5354
return;
5455

5556
for (auto BCFile : getDeviceLibs(DriverArgs)) {
@@ -141,7 +142,7 @@ AMDGPUOpenMPToolChain::computeMSVCVersion(const Driver *D,
141142

142143
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
143144
AMDGPUOpenMPToolChain::getDeviceLibs(const llvm::opt::ArgList &Args) const {
144-
if (Args.hasArg(options::OPT_nogpulib))
145+
if (!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true))
145146
return {};
146147

147148
StringRef GpuArch = getProcessorFromTargetID(

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7117,9 +7117,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
71177117
}
71187118
}
71197119

7120-
// Forward -nogpulib to -cc1.
7121-
if (Args.hasArg(options::OPT_nogpulib))
7122-
CmdArgs.push_back("-nogpulib");
7120+
// Forward --no-offloadlib to -cc1.
7121+
if (!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true))
7122+
CmdArgs.push_back("--no-offloadlib");
71237123

71247124
if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) {
71257125
CmdArgs.push_back(
@@ -9319,7 +9319,8 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
93199319
CmdArgs.push_back("--save-temps");
93209320

93219321
// Pass in the C library for GPUs if present and not disabled.
9322-
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_r, options::OPT_nogpulib,
9322+
if (Args.hasFlag(options::OPT_offloadlib, OPT_no_offloadlib, true) &&
9323+
!Args.hasArg(options::OPT_nostdlib, options::OPT_r,
93239324
options::OPT_nodefaultlibs, options::OPT_nolibc,
93249325
options::OPT_nogpulibc)) {
93259326
forAllAssociatedToolChains(C, JA, getToolChain(), [&](const ToolChain &TC) {

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1289,7 +1289,8 @@ bool tools::addOpenMPRuntime(const Compilation &C, ArgStringList &CmdArgs,
12891289
if (IsOffloadingHost)
12901290
CmdArgs.push_back("-lomptarget");
12911291

1292-
if (IsOffloadingHost && !Args.hasArg(options::OPT_nogpulib))
1292+
if (IsOffloadingHost &&
1293+
Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true))
12931294
CmdArgs.push_back("-lomptarget.devicertl");
12941295

12951296
addArchSpecificRPath(TC, Args, CmdArgs);

clang/lib/Driver/ToolChains/Cuda.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ CudaInstallationDetector::CudaInstallationDetector(
196196
Candidates.emplace_back(D.SysRoot + "/usr/lib/cuda");
197197
}
198198

199-
bool NoCudaLib = Args.hasArg(options::OPT_nogpulib);
199+
bool NoCudaLib =
200+
!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib, true);
200201

201202
for (const auto &Candidate : Candidates) {
202203
InstallPath = Candidate.Path;
@@ -865,7 +866,8 @@ void CudaToolChain::addClangTargetOptions(
865866
options::OPT_fno_cuda_short_ptr, false))
866867
CC1Args.append({"-mllvm", "--nvptx-short-ptr"});
867868

868-
if (DriverArgs.hasArg(options::OPT_nogpulib))
869+
if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
870+
true))
869871
return;
870872

871873
if (DeviceOffloadingKind == Action::OFK_OpenMP &&

clang/lib/Driver/ToolChains/Flang.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,8 @@ void Flang::addOffloadOptions(Compilation &C, const InputInfoList &Inputs,
557557
CmdArgs.push_back("-fopenmp-assume-no-thread-state");
558558
if (Args.hasArg(options::OPT_fopenmp_assume_no_nested_parallelism))
559559
CmdArgs.push_back("-fopenmp-assume-no-nested-parallelism");
560-
if (Args.hasArg(options::OPT_nogpulib))
560+
if (!Args.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
561+
true))
561562
CmdArgs.push_back("-nogpulib");
562563
}
563564

clang/lib/Driver/ToolChains/HIPAMD.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,8 @@ VersionTuple HIPAMDToolChain::computeMSVCVersion(const Driver *D,
352352
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
353353
HIPAMDToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {
354354
llvm::SmallVector<BitCodeLibraryInfo, 12> BCLibs;
355-
if (DriverArgs.hasArg(options::OPT_nogpulib) ||
355+
if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
356+
true) ||
356357
getGPUArch(DriverArgs) == "amdgcnspirv")
357358
return {};
358359
ArgStringList LibraryPaths;

clang/lib/Driver/ToolChains/HIPSPV.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,8 @@ void HIPSPVToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs,
204204
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
205205
HIPSPVToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {
206206
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> BCLibs;
207-
if (DriverArgs.hasArg(options::OPT_nogpulib))
207+
if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
208+
true))
208209
return {};
209210

210211
ArgStringList LibraryPaths;

clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ void SPIRVOpenMPToolChain::addClangTargetOptions(
2727
if (DeviceOffloadingKind != Action::OFK_OpenMP)
2828
return;
2929

30-
if (DriverArgs.hasArg(options::OPT_nogpulib))
30+
if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
31+
true))
3132
return;
3233
addOpenMPDeviceRTL(getDriver(), DriverArgs, CC1Args, "", getTriple(), HostTC);
3334
}

clang/test/Driver/amdgpu-openmp-toolchain.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@
5252
// CHECK-EMIT-LLVM-IR: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-emit-llvm"
5353

5454
// RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 \
55-
// RUN: --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode -fopenmp-new-driver %s 2>&1 | \
55+
// RUN: --no-offloadlib --offloadlib --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s 2>&1 | \
5656
// RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE
5757
// 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"
5858

5959
// RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx803 -nogpulib \
60-
// RUN: --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode -fopenmp-new-driver %s 2>&1 | \
60+
// RUN: --offloadlib --no-offloadlib --rocm-device-lib-path=%S/Inputs/rocm/amdgcn/bitcode %s 2>&1 | \
6161
// RUN: FileCheck %s --check-prefix=CHECK-LIB-DEVICE-NOGPULIB
62-
// 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"
62+
// 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"
6363

6464
// RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a:sramecc-:xnack+ \
6565
// RUN: -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-TARGET-ID

0 commit comments

Comments
 (0)