[llvm] [NFC][LLVM][TableGen] Eliminate inheritance from std::vector (PR #136573)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 21 08:48:26 PDT 2025
https://github.com/jurahul created https://github.com/llvm/llvm-project/pull/136573
Fix `DecoderTable` to not inherit directly from std::vector and use composition instead.
>From ac13455f56c9de0c89d93f9a888ae2d79595aaf4 Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Mon, 21 Apr 2025 08:22:39 -0700
Subject: [PATCH] [LLVM][TableGen] Eliminate inheritance from std::vector
Fix `DecoderTable` to not inherit directly from std::vector and use
composition instead.
---
llvm/utils/TableGen/DecoderEmitter.cpp | 30 +++++++++++++++++++-------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/llvm/utils/TableGen/DecoderEmitter.cpp b/llvm/utils/TableGen/DecoderEmitter.cpp
index ba360333f86e5..415fe13f87547 100644
--- a/llvm/utils/TableGen/DecoderEmitter.cpp
+++ b/llvm/utils/TableGen/DecoderEmitter.cpp
@@ -127,20 +127,32 @@ typedef std::vector<FixupList> FixupScopeList;
typedef SmallSetVector<CachedHashString, 16> PredicateSet;
typedef SmallSetVector<CachedHashString, 16> DecoderSet;
-struct DecoderTable : public std::vector<uint8_t> {
+class DecoderTable {
+public:
+ DecoderTable() { Data.reserve(16384); }
+
+ void clear() { Data.clear(); }
+ void push_back(uint8_t Item) { Data.push_back(Item); }
+ size_t size() const { return Data.size(); }
+ const uint8_t *data() const { return Data.data(); }
+
+ using const_iterator = std::vector<uint8_t>::const_iterator;
+ const_iterator begin() const { return Data.begin(); }
+ const_iterator end() const { return Data.end(); }
+
// Insert a ULEB128 encoded value into the table.
void insertULEB128(uint64_t Value) {
// Encode and emit the value to filter against.
uint8_t Buffer[16];
unsigned Len = encodeULEB128(Value, Buffer);
- insert(end(), Buffer, Buffer + Len);
+ Data.insert(Data.end(), Buffer, Buffer + Len);
}
// Insert space for `NumToSkip` and return the position
// in the table for patching.
size_t insertNumToSkip() {
- size_t Size = size();
- insert(end(), getNumToSkipInBytes(), 0);
+ size_t Size = Data.size();
+ Data.insert(Data.end(), getNumToSkipInBytes(), 0);
return Size;
}
@@ -156,11 +168,14 @@ struct DecoderTable : public std::vector<uint8_t> {
PrintFatalError(
"disassembler decoding table too large, try --large-decoder-table");
- (*this)[FixupIdx] = static_cast<uint8_t>(Delta);
- (*this)[FixupIdx + 1] = static_cast<uint8_t>(Delta >> 8);
+ Data[FixupIdx] = static_cast<uint8_t>(Delta);
+ Data[FixupIdx + 1] = static_cast<uint8_t>(Delta >> 8);
if (getNumToSkipInBytes() == 3)
- (*this)[FixupIdx + 2] = static_cast<uint8_t>(Delta >> 16);
+ Data[FixupIdx + 2] = static_cast<uint8_t>(Delta >> 16);
}
+
+private:
+ std::vector<uint8_t> Data;
};
struct DecoderTableInfo {
@@ -2517,7 +2532,6 @@ namespace {
// decoders to give more opportunities for uniqueing.
TableInfo.Table.clear();
TableInfo.FixupStack.clear();
- TableInfo.Table.reserve(16384);
TableInfo.FixupStack.emplace_back();
FC.emitTableEntries(TableInfo);
// Any NumToSkip fixups in the top level scope can resolve to the
More information about the llvm-commits
mailing list