[llvm-branch-commits] [clang] clang: Avoid intermediate DenseSet of triples (PR #189263)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sun Mar 29 09:41:13 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-driver

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>

This was computing a DenseSet<StringRef> of triples, but the
only use was to insert all the entries into a multiset. Just
use the multiset in the first place.

---
Full diff: https://github.com/llvm/llvm-project/pull/189263.diff


1 Files Affected:

- (modified) clang/lib/Driver/Driver.cpp (+7-8) 


``````````diff
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 6afdf58f3c5da..81792b74089dc 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -945,7 +945,7 @@ getSystemOffloadArchs(Compilation &C, Action::OffloadKind Kind) {
 
 // Attempts to infer the correct offloading toolchain triple by looking at the
 // requested offloading kind and architectures.
-static llvm::DenseSet<llvm::StringRef>
+static std::multiset<llvm::StringRef>
 inferOffloadToolchains(Compilation &C, Action::OffloadKind Kind) {
   std::set<std::string> Archs;
   for (Arg *A : C.getInputArgs()) {
@@ -966,7 +966,7 @@ inferOffloadToolchains(Compilation &C, Action::OffloadKind Kind) {
     }
   }
 
-  llvm::DenseSet<llvm::StringRef> Triples;
+  std::multiset<llvm::StringRef> Triples;
   for (llvm::StringRef Arch : Archs) {
     OffloadArch ID = StringToOffloadArch(Arch);
     if (ID == OffloadArch::Unknown)
@@ -976,23 +976,23 @@ inferOffloadToolchains(Compilation &C, Action::OffloadKind Kind) {
     if (Kind == Action::OFK_HIP && !IsAMDOffloadArch(ID)) {
       C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
           << "HIP" << Arch;
-      return llvm::DenseSet<llvm::StringRef>();
+      return {};
     }
     if (Kind == Action::OFK_Cuda && !IsNVIDIAOffloadArch(ID)) {
       C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
           << "CUDA" << Arch;
-      return llvm::DenseSet<llvm::StringRef>();
+      return {};
     }
     if (Kind == Action::OFK_OpenMP &&
         (ID == OffloadArch::Unknown || ID == OffloadArch::Unused)) {
       C.getDriver().Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch)
           << Arch;
-      return llvm::DenseSet<llvm::StringRef>();
+      return {};
     }
     if (ID == OffloadArch::Unknown || ID == OffloadArch::Unused) {
       C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch)
           << "offload" << Arch;
-      return llvm::DenseSet<llvm::StringRef>();
+      return {};
     }
 
     llvm::StringRef TripleStr =
@@ -1102,8 +1102,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
                  ->getAsString(C.getInputArgs());
   } else if (Kinds.size() > 0) {
     for (Action::OffloadKind Kind : Kinds) {
-      llvm::DenseSet<llvm::StringRef> Derived = inferOffloadToolchains(C, Kind);
-      Triples.insert(Derived.begin(), Derived.end());
+      Triples = inferOffloadToolchains(C, Kind);
     }
   }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/189263


More information about the llvm-branch-commits mailing list