https://github.com/4vtomat updated 
https://github.com/llvm/llvm-project/pull/143503

>From 56de91cf1693b9983ed6828e5daadc94f78e978c Mon Sep 17 00:00:00 2001
From: Brandon Wu <songwu0...@gmail.com>
Date: Tue, 10 Jun 2025 03:07:12 -0700
Subject: [PATCH 1/2] [RISCV] Cache required extensions string for
 RVVIntrinsicDef

This prevents many duplicated copies of required extensions string.
---
 clang/lib/Sema/SemaRISCV.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Sema/SemaRISCV.cpp b/clang/lib/Sema/SemaRISCV.cpp
index 9f70be746eb3f..628a3e5e8b417 100644
--- a/clang/lib/Sema/SemaRISCV.cpp
+++ b/clang/lib/Sema/SemaRISCV.cpp
@@ -27,6 +27,7 @@
 #include "clang/Sema/Sema.h"
 #include "clang/Support/RISCVVIntrinsicUtils.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/StringSaver.h"
 #include "llvm/TargetParser/RISCVISAInfo.h"
 #include "llvm/TargetParser/RISCVTargetParser.h"
 #include <optional>
@@ -47,7 +48,7 @@ struct RVVIntrinsicDef {
   std::string BuiltinName;
 
   /// Mapping to RequiredFeatures in riscv_vector.td
-  std::string RequiredExtensions;
+  StringRef RequiredExtensions;
 
   /// Function signature, first element is return type.
   RVVTypes Signature;
@@ -192,6 +193,10 @@ class RISCVIntrinsicManagerImpl : public 
sema::RISCVIntrinsicManager {
   // Mapping function name to RVVOverloadIntrinsicDef.
   StringMap<RVVOverloadIntrinsicDef> OverloadIntrinsics;
 
+  // Caching the required extension strings.
+  BumpPtrAllocator StrAlloc;
+  UniqueStringSaver StrPool;
+
   // Create RVVIntrinsicDef.
   void InitRVVIntrinsic(const RVVIntrinsicRecord &Record, StringRef SuffixStr,
                         StringRef OverloadedSuffixStr, bool IsMask,
@@ -206,7 +211,7 @@ class RISCVIntrinsicManagerImpl : public 
sema::RISCVIntrinsicManager {
                               IntrinsicKind K);
 
 public:
-  RISCVIntrinsicManagerImpl(clang::Sema &S) : S(S) {
+  RISCVIntrinsicManagerImpl(clang::Sema &S) : S(S), StrPool(StrAlloc) {
     ConstructedRISCVVBuiltins = false;
     ConstructedRISCVSiFiveVectorBuiltins = false;
     ConstructedRISCVAndesVectorBuiltins = false;
@@ -385,7 +390,8 @@ void RISCVIntrinsicManagerImpl::InitRVVIntrinsic(
   uint32_t Index = IntrinsicList.size();
   assert(IntrinsicList.size() == (size_t)Index &&
          "Intrinsics indices overflow.");
-  IntrinsicList.push_back({BuiltinName, Record.RequiredExtensions, Signature});
+  IntrinsicList.push_back(
+      {BuiltinName, StrPool.save(Record.RequiredExtensions), Signature});
 
   // Creating mapping to Intrinsics.
   Intrinsics.insert({Name, Index});

>From 947142e0223d37bff334a1ca4520cb5149882627 Mon Sep 17 00:00:00 2001
From: Brandon Wu <songwu0...@gmail.com>
Date: Tue, 10 Jun 2025 19:13:46 -0700
Subject: [PATCH 2/2] fixup! [RISCV] Cache required extensions string for
 RVVIntrinsicDef

---
 clang/lib/Sema/SemaRISCV.cpp | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/clang/lib/Sema/SemaRISCV.cpp b/clang/lib/Sema/SemaRISCV.cpp
index 628a3e5e8b417..9eab0c2a0df6a 100644
--- a/clang/lib/Sema/SemaRISCV.cpp
+++ b/clang/lib/Sema/SemaRISCV.cpp
@@ -27,7 +27,6 @@
 #include "clang/Sema/Sema.h"
 #include "clang/Support/RISCVVIntrinsicUtils.h"
 #include "llvm/ADT/SmallVector.h"
-#include "llvm/Support/StringSaver.h"
 #include "llvm/TargetParser/RISCVISAInfo.h"
 #include "llvm/TargetParser/RISCVTargetParser.h"
 #include <optional>
@@ -193,10 +192,6 @@ class RISCVIntrinsicManagerImpl : public 
sema::RISCVIntrinsicManager {
   // Mapping function name to RVVOverloadIntrinsicDef.
   StringMap<RVVOverloadIntrinsicDef> OverloadIntrinsics;
 
-  // Caching the required extension strings.
-  BumpPtrAllocator StrAlloc;
-  UniqueStringSaver StrPool;
-
   // Create RVVIntrinsicDef.
   void InitRVVIntrinsic(const RVVIntrinsicRecord &Record, StringRef SuffixStr,
                         StringRef OverloadedSuffixStr, bool IsMask,
@@ -211,7 +206,7 @@ class RISCVIntrinsicManagerImpl : public 
sema::RISCVIntrinsicManager {
                               IntrinsicKind K);
 
 public:
-  RISCVIntrinsicManagerImpl(clang::Sema &S) : S(S), StrPool(StrAlloc) {
+  RISCVIntrinsicManagerImpl(clang::Sema &S) : S(S) {
     ConstructedRISCVVBuiltins = false;
     ConstructedRISCVSiFiveVectorBuiltins = false;
     ConstructedRISCVAndesVectorBuiltins = false;
@@ -390,8 +385,7 @@ void RISCVIntrinsicManagerImpl::InitRVVIntrinsic(
   uint32_t Index = IntrinsicList.size();
   assert(IntrinsicList.size() == (size_t)Index &&
          "Intrinsics indices overflow.");
-  IntrinsicList.push_back(
-      {BuiltinName, StrPool.save(Record.RequiredExtensions), Signature});
+  IntrinsicList.push_back({BuiltinName, Record.RequiredExtensions, Signature});
 
   // Creating mapping to Intrinsics.
   Intrinsics.insert({Name, Index});

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to