Skip to content

Commit 6db02dc

Browse files
authored
[Clang] Introduce --offload-targets for -fopenmp-targets (#146594)
Summary: This patch is mostly an NFC that renames the existing `-fopenmp-targets` into `--offload-targets`. Doing this early to simplify a follow-up patch that will hopefully allow this syntax to be used more generically over the existing `--offload` syntax (which I think is mostly unmaintained now.). Following in the well-trodden path of trying to pull language specific offload options into generic ones, but right now this is still just OpenMP specific.
1 parent 454e4e3 commit 6db02dc

File tree

9 files changed

+21
-17
lines changed

9 files changed

+21
-17
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1138,6 +1138,10 @@ def fno_convergent_functions : Flag<["-"], "fno-convergent-functions">,
11381138

11391139
// Common offloading options
11401140
let Group = offload_Group in {
1141+
def offload_targets_EQ : CommaJoined<["--"], "offload-targets=">,
1142+
Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
1143+
HelpText<"Specify a list of target architectures to use for offloading.">;
1144+
11411145
def offload_arch_EQ : CommaJoined<["--"], "offload-arch=">,
11421146
Visibility<[ClangOption, FlangOption]>,
11431147
HelpText<"Specify an offloading device architecture for CUDA, HIP, or OpenMP. (e.g. sm_35). "
@@ -3681,7 +3685,7 @@ def fopenmp_use_tls : Flag<["-"], "fopenmp-use-tls">, Group<f_Group>,
36813685
Flags<[NoArgumentUnused, HelpHidden]>;
36823686
def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>,
36833687
Flags<[NoArgumentUnused, HelpHidden]>, Visibility<[ClangOption, CC1Option]>;
3684-
def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">,
3688+
def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">, Alias<offload_targets_EQ>,
36853689
Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
36863690
HelpText<"Specify comma-separated list of triples OpenMP offloading targets to be supported">;
36873691
def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">,

clang/lib/Driver/Driver.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
996996
/*SpecificToolchain=*/true);
997997
} else if (IsHIP && !UseLLVMOffload) {
998998
if (auto *OMPTargetArg =
999-
C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {
999+
C.getInputArgs().getLastArg(options::OPT_offload_targets_EQ)) {
10001000
Diag(clang::diag::err_drv_unsupported_opt_for_language_mode)
10011001
<< OMPTargetArg->getSpelling() << "HIP";
10021002
return;
@@ -1030,7 +1030,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
10301030
((IsCuda || IsHIP) && UseLLVMOffload) ||
10311031
(C.getInputArgs().hasFlag(options::OPT_fopenmp, options::OPT_fopenmp_EQ,
10321032
options::OPT_fno_openmp, false) &&
1033-
(C.getInputArgs().hasArg(options::OPT_fopenmp_targets_EQ) ||
1033+
(C.getInputArgs().hasArg(options::OPT_offload_targets_EQ) ||
10341034
C.getInputArgs().hasArg(options::OPT_offload_arch_EQ)));
10351035
if (IsOpenMPOffloading) {
10361036
// We expect that -fopenmp-targets is always used in conjunction with the
@@ -1046,7 +1046,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
10461046
// valid triple. Otherwise, if only --offload-arch= was specified we instead
10471047
// attempt to derive the appropriate toolchains from the arguments.
10481048
if (Arg *OpenMPTargets =
1049-
C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {
1049+
C.getInputArgs().getLastArg(options::OPT_offload_targets_EQ)) {
10501050
if (OpenMPTargets && !OpenMPTargets->getNumValues()) {
10511051
Diag(clang::diag::warn_drv_empty_joined_argument)
10521052
<< OpenMPTargets->getAsString(C.getInputArgs());
@@ -1124,7 +1124,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
11241124
Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch)
11251125
<< "native";
11261126
}
1127-
} else if (C.getInputArgs().hasArg(options::OPT_fopenmp_targets_EQ)) {
1127+
} else if (C.getInputArgs().hasArg(options::OPT_offload_targets_EQ)) {
11281128
Diag(clang::diag::err_drv_expecting_fopenmp_with_fopenmp_targets);
11291129
return;
11301130
}

clang/lib/Driver/ToolChain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1731,7 +1731,7 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOpenMPTargetArgs(
17311731
continue;
17321732
}
17331733
if (XOpenMPTargetNoTriple && XOpenMPTargetArg &&
1734-
Args.getAllArgValues(options::OPT_fopenmp_targets_EQ).size() != 1) {
1734+
Args.getAllArgValues(options::OPT_offload_targets_EQ).size() != 1) {
17351735
getDriver().Diag(diag::err_drv_Xopenmp_target_missing_triple);
17361736
continue;
17371737
}

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1404,7 +1404,7 @@ void tools::addOpenMPHostOffloadingArgs(const Compilation &C,
14041404

14051405
// For all the host OpenMP offloading compile jobs we need to pass the targets
14061406
// information using -fopenmp-targets= option.
1407-
constexpr llvm::StringLiteral Targets("-fopenmp-targets=");
1407+
constexpr llvm::StringLiteral Targets("--offload-targets=");
14081408

14091409
SmallVector<std::string> Triples;
14101410
auto TCRange = C.getOffloadToolChains<Action::OFK_OpenMP>();

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3891,7 +3891,7 @@ void CompilerInvocationBase::GenerateLangArgs(const LangOptions &Opts,
38913891
llvm::interleave(
38923892
Opts.OMPTargetTriples, OS,
38933893
[&OS](const llvm::Triple &T) { OS << T.str(); }, ",");
3894-
GenerateArg(Consumer, OPT_fopenmp_targets_EQ, Targets);
3894+
GenerateArg(Consumer, OPT_offload_targets_EQ, Targets);
38953895
}
38963896

38973897
if (!Opts.OMPHostIRFile.empty())
@@ -4322,7 +4322,7 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
43224322
Opts.OpenMPIRBuilder =
43234323
Opts.OpenMP && Args.hasArg(options::OPT_fopenmp_enable_irbuilder);
43244324
bool IsTargetSpecified =
4325-
Opts.OpenMPIsTargetDevice || Args.hasArg(options::OPT_fopenmp_targets_EQ);
4325+
Opts.OpenMPIsTargetDevice || Args.hasArg(options::OPT_offload_targets_EQ);
43264326

43274327
if (Opts.OpenMP || Opts.OpenMPSimd) {
43284328
if (int Version = getLastArgIntValue(
@@ -4382,7 +4382,7 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
43824382
}
43834383

43844384
// Get the OpenMP target triples if any.
4385-
if (Arg *A = Args.getLastArg(options::OPT_fopenmp_targets_EQ)) {
4385+
if (Arg *A = Args.getLastArg(options::OPT_offload_targets_EQ)) {
43864386
enum ArchPtrSize { Arch16Bit, Arch32Bit, Arch64Bit };
43874387
auto getArchPtrSize = [](const llvm::Triple &T) {
43884388
if (T.isArch16Bit())

clang/test/Driver/amdgpu-openmp-sanitize-options.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@
5454
// NOXNACK: warning: ignoring '-fsanitize=address' option for offload arch 'gfx908' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
5555
// XNACKNEG: warning: ignoring '-fsanitize=address' option for offload arch 'gfx908:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead
5656

57-
// HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "c".*}}
57+
// HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "--offload-targets=amdgcn-amd-amdhsa".* "-x" "c".*}}
5858

5959
// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" "[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}}
6060
// NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}}
6161

6262
// SAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* "--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=gfx908(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}}
63-
// SAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "ir".*}}
63+
// SAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "--offload-targets=amdgcn-amd-amdhsa".* "-x" "ir".*}}
6464
// SAN: {{"[^"]*clang-linker-wrapper[^"]*".* "--host-triple=x86_64-unknown-linux-gnu".* "--linker-path=[^"]*".* "--whole-archive" "[^"]*(libclang_rt.asan_static.a|libclang_rt.asan_static-x86_64.a)".* "--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}}

clang/test/Driver/hip-options.hip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
// RUN: not %clang --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
119119
// RUN: --offload-arch=gfx906 -fopenmp=libomp -fopenmp-targets=amdgcn %s 2>&1 \
120120
// RUN: | FileCheck -check-prefix=OMPTGT %s
121-
// OMPTGT: unsupported option '-fopenmp-targets=' for language mode 'HIP'
121+
// OMPTGT: unsupported option '--offload-targets=' for language mode 'HIP'
122122

123123
// Check -Xoffload-linker option is passed to lld.
124124

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1248,7 +1248,7 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
12481248

12491249
// Get the OpenMP target triples if any.
12501250
if (auto *arg =
1251-
args.getLastArg(clang::driver::options::OPT_fopenmp_targets_EQ)) {
1251+
args.getLastArg(clang::driver::options::OPT_offload_targets_EQ)) {
12521252
enum ArchPtrSize { Arch16Bit, Arch32Bit, Arch64Bit };
12531253
auto getArchPtrSize = [](const llvm::Triple &triple) {
12541254
if (triple.isArch16Bit())

flang/test/Driver/omp-driver-offload.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@
225225
! RUN: | FileCheck %s --check-prefix=OFFLOAD-TARGETS
226226

227227
! OFFLOAD-TARGETS: "{{[^"]*}}flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu"
228-
! OFFLOAD-TARGETS-SAME: "-fopenmp-targets=amdgcn-amd-amdhsa"
228+
! OFFLOAD-TARGETS-SAME: "--offload-targets=amdgcn-amd-amdhsa"
229229
! OFFLOAD-TARGETS-NEXT: "{{[^"]*}}flang" "-fc1" "-triple" "amdgcn-amd-amdhsa"
230-
! OFFLOAD-TARGETS-NOT: -fopenmp-targets
230+
! OFFLOAD-TARGETS-NOT: --offload-targets
231231
! OFFLOAD-TARGETS: "{{[^"]*}}flang" "-fc1" "-triple" "x86_64-unknown-linux-gnu"
232-
! OFFLOAD-TARGETS-SAME: "-fopenmp-targets=amdgcn-amd-amdhsa"
232+
! OFFLOAD-TARGETS-SAME: "--offload-targets=amdgcn-amd-amdhsa"

0 commit comments

Comments
 (0)