From 702332c634f6a452a4fea5ee8cd3ba6a1c240bef Mon Sep 17 00:00:00 2001 From: Srividya Sundaram Date: Wed, 17 Sep 2025 14:17:43 -0700 Subject: [PATCH 1/3] [SYCL][Driver] Fix incorrect target triple duplication error. (#20117) Addresses https://github.com/intel/llvm/issues/20113 --- clang/lib/Driver/Driver.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index f9c370f8c153e..6e0b07ea02399 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1399,8 +1399,13 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, if (isDuplicateTargetTripleString(Target)) continue; Triples.insert(C.getInputArgs().MakeArgString(TargetTripleString)); - } else + } else { + // Check for duplicate target triple strings for offloading + // models other than SYCL, before inserting in Triples. + if (isDuplicateTargetTripleString(Target)) + continue; Triples.insert(C.getInputArgs().MakeArgString(Target)); + } } if (ArgValues.empty()) @@ -1458,10 +1463,6 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, Diag(diag::err_drv_invalid_or_unsupported_offload_target) << TT.str(); continue; } - // Check for duplicate target triple strings. - if ((Kind == Action::OFK_OpenMP || Kind == Action::OFK_SYCL) && - isDuplicateTargetTripleString(Target)) - continue; auto &TC = getOffloadToolChain(C.getInputArgs(), Kind, TT, C.getDefaultToolChain().getTriple()); From 4f7ca3340b81722ff3aca7789a14a956679e96ae Mon Sep 17 00:00:00 2001 From: srividya sundaram Date: Tue, 23 Sep 2025 21:56:10 -0700 Subject: [PATCH 2/3] [Driver]Fix duplicate target triple warning --- clang/lib/Driver/Driver.cpp | 42 ++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 6e0b07ea02399..3901fa5ab1fe2 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1365,25 +1365,14 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, // Get the list of requested offloading toolchains. If they were not // explicitly specified we will infer them based on the offloading language // and requested architectures. - llvm::StringMap FoundNormalizedTriples; - auto isDuplicateTargetTripleString = [&](llvm::StringRef Target) -> bool { - std::string NormalizedName = - C.getDriver().getSYCLDeviceTriple(Target).normalize(); - auto [TripleIt, Inserted] = - FoundNormalizedTriples.try_emplace(NormalizedName, Target); - if (!Inserted) { - Diag(clang::diag::warn_drv_offload_target_duplicate) - << Target << TripleIt->second; - return true; - } - return false; - }; std::multiset Triples; + llvm::StringMap FoundNormalizedTriples; if (C.getInputArgs().hasArg(options::OPT_offload_targets_EQ)) { std::vector ArgValues = C.getInputArgs().getAllArgValues(options::OPT_offload_targets_EQ); llvm::Triple TT; + for (llvm::StringRef Target : ArgValues) { if (IsSYCL) { StringRef TargetTripleString(Target); @@ -1393,17 +1382,18 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, TargetTripleString = "nvptx64-nvidia-cuda"; else if (Target.starts_with("amd_gpu_")) TargetTripleString = "amdgcn-amd-amdhsa"; - - // Check for duplicate target triple strings - // before inserting in Triples. - if (isDuplicateTargetTripleString(Target)) + std::string NormalizedName = + getSYCLDeviceTriple(TargetTripleString).normalize(); + auto [TripleIt, Inserted] = + FoundNormalizedTriples.try_emplace(NormalizedName, Target); + if (!Inserted) { + if (Target == TripleIt->second) + Diag(clang::diag::warn_drv_offload_target_duplicate) + << Target << TripleIt->second; continue; + } Triples.insert(C.getInputArgs().MakeArgString(TargetTripleString)); } else { - // Check for duplicate target triple strings for offloading - // models other than SYCL, before inserting in Triples. - if (isDuplicateTargetTripleString(Target)) - continue; Triples.insert(C.getInputArgs().MakeArgString(Target)); } } @@ -1419,7 +1409,6 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, Triples.insert(Derived.begin(), Derived.end()); } } - FoundNormalizedTriples.clear(); // Build an offloading toolchain for every requested target and kind. for (StringRef Target : Triples) { @@ -1464,6 +1453,15 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, continue; } + std::string NormalizedName = TT.normalize(); + auto [TripleIt, Inserted] = + FoundNormalizedTriples.try_emplace(NormalizedName, Target); + if (!Inserted) { + Diag(clang::diag::warn_drv_offload_target_duplicate) + << Target << TripleIt->second; + continue; + } + auto &TC = getOffloadToolChain(C.getInputArgs(), Kind, TT, C.getDefaultToolChain().getTriple()); From 3cecdc7e79918b5a63f4be7f03c1e52591e6b600 Mon Sep 17 00:00:00 2001 From: srividya sundaram Date: Wed, 24 Sep 2025 09:48:03 -0700 Subject: [PATCH 3/3] Fix CUDA tests --- clang/lib/Driver/Driver.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 3901fa5ab1fe2..e37551273b617 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1453,13 +1453,15 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, continue; } - std::string NormalizedName = TT.normalize(); - auto [TripleIt, Inserted] = - FoundNormalizedTriples.try_emplace(NormalizedName, Target); - if (!Inserted) { - Diag(clang::diag::warn_drv_offload_target_duplicate) - << Target << TripleIt->second; - continue; + if (Kind == Action::OFK_OpenMP || Kind == Action::OFK_SYCL) { + std::string NormalizedName = TT.normalize(); + auto [TripleIt, Inserted] = + FoundNormalizedTriples.try_emplace(NormalizedName, Target); + if (!Inserted) { + Diag(clang::diag::warn_drv_offload_target_duplicate) + << Target << TripleIt->second; + continue; + } } auto &TC = getOffloadToolChain(C.getInputArgs(), Kind, TT,