https://github.com/tclin914 updated https://github.com/llvm/llvm-project/pull/180104
>From 51a859414218b208eb4661a178350948a56d5e38 Mon Sep 17 00:00:00 2001 From: Jim Lin <[email protected]> Date: Thu, 5 Feb 2026 13:57:02 +0800 Subject: [PATCH 1/3] [RISCV] Simply add the march/mabi strings to Flags for selecting multilib It does't need to compare the march/mabi with multilib's before adding such string into Flags. The negative one (!march/!mabi) has no effect during multilib selection. We can select either a multilib with identical march and mabi, or one with a subset of march and the same mabi. --- clang/lib/Driver/ToolChains/Gnu.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index f99eb9b3bae03..5761875c4d270 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -1633,7 +1633,7 @@ selectRISCVMultilib(const Driver &D, const MultilibSet &RISCVMultilibSet, // Collect all flags except march=* for (StringRef Flag : Flags) { - if (Flag.starts_with("!march=") || Flag.starts_with("-march=")) + if (Flag.starts_with("-march=")) continue; NewFlags.push_back(Flag.str()); @@ -1759,15 +1759,8 @@ static void findRISCVBareMetalMultilibs(const Driver &D, llvm::StringSet<> Added_ABIs; StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple); std::string MArch = tools::riscv::getRISCVArch(Args, TargetTriple); - for (auto Element : RISCVMultilibSet) { - addMultilibFlag(MArch == Element.march, - Twine("-march=", Element.march).str(), Flags); - if (!Added_ABIs.count(Element.mabi)) { - Added_ABIs.insert(Element.mabi); - addMultilibFlag(ABIName == Element.mabi, - Twine("-mabi=", Element.mabi).str(), Flags); - } - } + Flags.push_back("-march=" + MArch); + Flags.push_back("-mabi=" + ABIName.str()); if (selectRISCVMultilib(D, RISCVMultilibs, MArch, Flags, Result.SelectedMultilibs)) >From d509d98f210deed9e9e739bcd524d53d09e7e55f Mon Sep 17 00:00:00 2001 From: Jim Lin <[email protected]> Date: Mon, 9 Feb 2026 16:59:23 +0800 Subject: [PATCH 2/3] Remove used variable Added_ABIs --- clang/lib/Driver/ToolChains/Gnu.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 5761875c4d270..0aeb7defc6a69 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -1756,7 +1756,6 @@ static void findRISCVBareMetalMultilibs(const Driver &D, }); Multilib::flags_list Flags; - llvm::StringSet<> Added_ABIs; StringRef ABIName = tools::riscv::getRISCVABI(Args, TargetTriple); std::string MArch = tools::riscv::getRISCVArch(Args, TargetTriple); Flags.push_back("-march=" + MArch); >From b9e17ea8279150d5160ca6ee2bcffeaa2bca8f7f Mon Sep 17 00:00:00 2001 From: Jim Lin <[email protected]> Date: Thu, 12 Feb 2026 09:39:40 +0800 Subject: [PATCH 3/3] Address comment --- clang/lib/Driver/ToolChains/Gnu.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 0aeb7defc6a69..d8d537ec14b89 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -1609,7 +1609,7 @@ static void findCSKYMultilibs(const Driver &D, const llvm::Triple &TargetTriple, /// atomic operation can't work together correctly. static bool selectRISCVMultilib(const Driver &D, const MultilibSet &RISCVMultilibSet, - StringRef Arch, const Multilib::flags_list &Flags, + const Multilib::flags_list &Flags, llvm::SmallVectorImpl<Multilib> &SelectedMultilibs) { // Try to find the perfect matching multi-lib first. if (RISCVMultilibSet.select(D, Flags, SelectedMultilibs)) @@ -1618,6 +1618,17 @@ selectRISCVMultilib(const Driver &D, const MultilibSet &RISCVMultilibSet, Multilib::flags_list NewFlags; std::vector<MultilibBuilder> NewMultilibs; + // Collect all flags and extract Arch from march + StringRef Arch; + for (StringRef Flag : Flags) { + if (Flag.consume_front("-march=")) { + Arch = Flag; + continue; + } + + NewFlags.push_back(Flag.str()); + } + llvm::Expected<std::unique_ptr<llvm::RISCVISAInfo>> ParseResult = llvm::RISCVISAInfo::parseArchString( Arch, /*EnableExperimentalExtension=*/true, @@ -1631,14 +1642,6 @@ selectRISCVMultilib(const Driver &D, const MultilibSet &RISCVMultilibSet, addMultilibFlag(ISAInfo->getXLen() == 32, "-m32", NewFlags); addMultilibFlag(ISAInfo->getXLen() == 64, "-m64", NewFlags); - // Collect all flags except march=* - for (StringRef Flag : Flags) { - if (Flag.starts_with("-march=")) - continue; - - NewFlags.push_back(Flag.str()); - } - llvm::StringSet<> AllArchExts; // Reconstruct multi-lib list, and break march option into separated // extension. e.g. march=rv32im -> +i +m @@ -1761,8 +1764,7 @@ static void findRISCVBareMetalMultilibs(const Driver &D, Flags.push_back("-march=" + MArch); Flags.push_back("-mabi=" + ABIName.str()); - if (selectRISCVMultilib(D, RISCVMultilibs, MArch, Flags, - Result.SelectedMultilibs)) + if (selectRISCVMultilib(D, RISCVMultilibs, Flags, Result.SelectedMultilibs)) Result.Multilibs = std::move(RISCVMultilibs); } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
