https://github.com/4vtomat created https://github.com/llvm/llvm-project/pull/143503
This prevents many duplicated copies of required extensions string. >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] [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}); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits