[clang] b8d0411 - clang: Avoid intermediate DenseSet of triples (#189263)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 29 10:49:01 PDT 2026
Author: Matt Arsenault
Date: 2026-03-29T17:48:56Z
New Revision: b8d04118858ab63a2fe4b3568598c995dac9a198
URL: https://github.com/llvm/llvm-project/commit/b8d04118858ab63a2fe4b3568598c995dac9a198
DIFF: https://github.com/llvm/llvm-project/commit/b8d04118858ab63a2fe4b3568598c995dac9a198.diff
LOG: clang: Avoid intermediate DenseSet of triples (#189263)
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.
Added:
Modified:
clang/lib/Driver/Driver.cpp
Removed:
################################################################################
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 6afdf58f3c5da..d58cc3b2d72c2 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 =
@@ -1101,10 +1101,8 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
.getLastArg(options::OPT_offload_targets_EQ)
->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());
- }
+ for (Action::OffloadKind Kind : Kinds)
+ Triples = inferOffloadToolchains(C, Kind);
}
// Build an offloading toolchain for every requested target and kind.
More information about the cfe-commits
mailing list