[clang] [RISCV] Cache required extensions string for RVVIntrinsicDef (PR #143503)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 10 03:10:32 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Brandon Wu (4vtomat)
<details>
<summary>Changes</summary>
This prevents many duplicated copies of required extensions string.
---
Full diff: https://github.com/llvm/llvm-project/pull/143503.diff
1 Files Affected:
- (modified) clang/lib/Sema/SemaRISCV.cpp (+9-3)
``````````diff
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});
``````````
</details>
https://github.com/llvm/llvm-project/pull/143503
More information about the cfe-commits
mailing list