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

Reply via email to