[clang] [Driver] Add ExclusiveGroup feature to multilib.yaml. (PR #69447)
Fangrui Song via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 27 19:05:38 PDT 2023
================
@@ -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()) {
----------------
MaskRay wrote:
Thanks for the update, but the new code still has the duplicate hash table lookup/insert problem, which can be fixed by using try_emplace.
https://github.com/llvm/llvm-project/pull/69447
More information about the cfe-commits
mailing list