[clang] [RISCV] Cache required extensions string for RVVIntrinsicDef (PR #143503)
Brandon Wu via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 10 19:14:08 PDT 2025
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 <songwu0813 at 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 <songwu0813 at 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});
More information about the cfe-commits
mailing list