================ @@ -96,13 +97,39 @@ bool MultilibSet::select(const Multilib::flags_list &Flags, llvm::SmallVector<Multilib> &Selected) const { llvm::StringSet<> FlagSet(expandFlags(Flags)); Selected.clear(); - llvm::copy_if(Multilibs, std::back_inserter(Selected), - [&FlagSet](const Multilib &M) { - for (const std::string &F : M.flags()) - if (!FlagSet.contains(F)) - return false; - return true; - }); + + // Decide which multilibs we're going to select at all + std::vector<bool> IsSelected(Multilibs.size(), false); + std::map<std::string, size_t> ExclusiveGroupMembers; + for (size_t i = 0, e = Multilibs.size(); i < e; ++i) { + const Multilib &M = Multilibs[i]; + + // If this multilib doesn't match all our flags, don't select it + if (!llvm::all_of(M.flags(), [&FlagSet](const std::string &F) { + return FlagSet.contains(F); + })) + continue; + + // If this multilib has the same ExclusiveGroup as one we've already + // selected, de-select the previous one + const std::string &group = M.exclusiveGroup(); + if (!group.empty()) { ---------------- statham-arm wrote:
`insert`, actually – `try_emplace` appears in `DenseMap` but not `DenseSet`. But otherwise, done. https://github.com/llvm/llvm-project/pull/69447 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits