https://github.com/jhuber6 created https://github.com/llvm/llvm-project/pull/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. >From 7d5369ae9268eff3aa08f2ef96b341952a3c904a Mon Sep 17 00:00:00 2001 From: Joseph Huber <hube...@outlook.com> Date: Wed, 2 Jul 2025 08:09:35 -0500 Subject: [PATCH] [Clang] Properly use `CommaJoined` for `--offload-arch` 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. --- clang/include/clang/Driver/Options.td | 2 +- clang/lib/Driver/Driver.cpp | 23 ++++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 9911d752966e3..0c8a219b19bf4 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1138,7 +1138,7 @@ def fno_convergent_functions : Flag<["-"], "fno-convergent-functions">, // Common offloading options let Group = offload_Group in { -def offload_arch_EQ : Joined<["--"], "offload-arch=">, +def offload_arch_EQ : CommaJoined<["--"], "offload-arch=">, Visibility<[ClangOption, FlangOption]>, HelpText<"Specify an offloading device architecture for CUDA, HIP, or OpenMP. (e.g. sm_35). " "If 'native' is used the compiler will detect locally installed architectures. " diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 775f3f029861c..f9fd20880bff5 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1085,19 +1085,16 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, llvm::Triple AMDTriple("amdgcn-amd-amdhsa"); llvm::Triple NVPTXTriple("nvptx64-nvidia-cuda"); - for (StringRef A : + for (StringRef Arch : C.getInputArgs().getAllArgValues(options::OPT_offload_arch_EQ)) { - for (StringRef Arch : llvm::split(A, ",")) { - bool IsNVPTX = IsNVIDIAOffloadArch( - StringToOffloadArch(getProcessorFromTargetID(NVPTXTriple, Arch))); - bool IsAMDGPU = IsAMDOffloadArch( - StringToOffloadArch(getProcessorFromTargetID(AMDTriple, Arch))); - if (!IsNVPTX && !IsAMDGPU && !Arch.empty() && - !Arch.equals_insensitive("native")) { - Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch) - << Arch; - return; - } + bool IsNVPTX = IsNVIDIAOffloadArch( + StringToOffloadArch(getProcessorFromTargetID(NVPTXTriple, Arch))); + bool IsAMDGPU = IsAMDOffloadArch( + StringToOffloadArch(getProcessorFromTargetID(AMDTriple, Arch))); + if (!IsNVPTX && !IsAMDGPU && !Arch.empty() && + !Arch.equals_insensitive("native")) { + Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch) << Arch; + return; } } @@ -4787,7 +4784,7 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, // Add or remove the seen architectures in order of appearance. If an // invalid architecture is given we simply exit. if (Arg->getOption().matches(options::OPT_offload_arch_EQ)) { - for (StringRef Arch : llvm::split(Arg->getValue(), ",")) { + for (StringRef Arch : Arg->getValues()) { if (Arch == "native" || Arch.empty()) { auto GPUsOrErr = TC->getSystemGPUArchs(Args); if (!GPUsOrErr) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits