Skip to content

Commit d04d255

Browse files
authored
[Clang] Properly use CommaJoined for --offload-arch (llvm#146687)
Summary: This didn't use the built-in 'CommaJoined' feature for arguments and parsed out the strings manually. This patch simplifies this by just using the present functionality.
1 parent d74d4ff commit d04d255

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

clang/include/clang/Driver/Options.td

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

11391139
// Common offloading options
11401140
let Group = offload_Group in {
1141-
def offload_arch_EQ : Joined<["--"], "offload-arch=">,
1141+
def offload_arch_EQ : CommaJoined<["--"], "offload-arch=">,
11421142
Visibility<[ClangOption, FlangOption]>,
11431143
HelpText<"Specify an offloading device architecture for CUDA, HIP, or OpenMP. (e.g. sm_35). "
11441144
"If 'native' is used the compiler will detect locally installed architectures. "

clang/lib/Driver/Driver.cpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,19 +1090,16 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
10901090
llvm::Triple AMDTriple("amdgcn-amd-amdhsa");
10911091
llvm::Triple NVPTXTriple("nvptx64-nvidia-cuda");
10921092

1093-
for (StringRef A :
1093+
for (StringRef Arch :
10941094
C.getInputArgs().getAllArgValues(options::OPT_offload_arch_EQ)) {
1095-
for (StringRef Arch : llvm::split(A, ",")) {
1096-
bool IsNVPTX = IsNVIDIAOffloadArch(
1097-
StringToOffloadArch(getProcessorFromTargetID(NVPTXTriple, Arch)));
1098-
bool IsAMDGPU = IsAMDOffloadArch(
1099-
StringToOffloadArch(getProcessorFromTargetID(AMDTriple, Arch)));
1100-
if (!IsNVPTX && !IsAMDGPU && !Arch.empty() &&
1101-
!Arch.equals_insensitive("native")) {
1102-
Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch)
1103-
<< Arch;
1104-
return;
1105-
}
1095+
bool IsNVPTX = IsNVIDIAOffloadArch(
1096+
StringToOffloadArch(getProcessorFromTargetID(NVPTXTriple, Arch)));
1097+
bool IsAMDGPU = IsAMDOffloadArch(
1098+
StringToOffloadArch(getProcessorFromTargetID(AMDTriple, Arch)));
1099+
if (!IsNVPTX && !IsAMDGPU && !Arch.empty() &&
1100+
!Arch.equals_insensitive("native")) {
1101+
Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch) << Arch;
1102+
return;
11061103
}
11071104
}
11081105

@@ -4792,7 +4789,7 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args,
47924789
// Add or remove the seen architectures in order of appearance. If an
47934790
// invalid architecture is given we simply exit.
47944791
if (Arg->getOption().matches(options::OPT_offload_arch_EQ)) {
4795-
for (StringRef Arch : llvm::split(Arg->getValue(), ",")) {
4792+
for (StringRef Arch : Arg->getValues()) {
47964793
if (Arch == "native" || Arch.empty()) {
47974794
auto GPUsOrErr = TC->getSystemGPUArchs(Args);
47984795
if (!GPUsOrErr) {

0 commit comments

Comments
 (0)