https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/189263
>From a58579e09c51bdc28b8f7fc76f43346275552ad9 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Sun, 29 Mar 2026 11:19:05 +0200 Subject: [PATCH] clang: Avoid intermediate DenseSet of triples 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. --- clang/lib/Driver/Driver.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) 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. _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
