From 276d9a48e10f4d31a491c3ad595d88568624657d Mon Sep 17 00:00:00 2001 From: Sergei Barannikov Date: Tue, 16 Sep 2025 07:52:08 +0300 Subject: [PATCH] [TableGen][DecoderEmitter] Add a few DecoderTableInfo helpers (NFC) --- llvm/utils/TableGen/DecoderEmitter.cpp | 37 +++++++++++++++++--------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/llvm/utils/TableGen/DecoderEmitter.cpp b/llvm/utils/TableGen/DecoderEmitter.cpp index 97a6b58e1bd99..5b360ce24903e 100644 --- a/llvm/utils/TableGen/DecoderEmitter.cpp +++ b/llvm/utils/TableGen/DecoderEmitter.cpp @@ -226,6 +226,26 @@ struct DecoderTableInfo { DecoderTable Table; PredicateSet Predicates; DecoderSet Decoders; + + void insertPredicate(StringRef Predicate) { + Predicates.insert(CachedHashString(Predicate)); + } + + void insertDecoder(StringRef Decoder) { + Decoders.insert(CachedHashString(Decoder)); + } + + unsigned getPredicateIndex(StringRef Predicate) const { + auto I = find(Predicates, Predicate); + assert(I != Predicates.end()); + return std::distance(Predicates.begin(), I); + } + + unsigned getDecoderIndex(StringRef Decoder) const { + auto I = find(Decoders, Decoder); + assert(I != Decoders.end()); + return std::distance(Decoders.begin(), I); + } }; using NamespacesHwModesMap = std::map>; @@ -1090,13 +1110,8 @@ unsigned DecoderTableBuilder::getDecoderIndex(unsigned EncodingID) const { // performance concern, we can implement a mangling of the predicate // data easily enough with a map back to the actual string. That's // overkill for now, though. - - // Make sure the predicate is in the table. - DecoderSet &Decoders = TableInfo.Decoders; - Decoders.insert(CachedHashString(Decoder)); - // Now figure out the index for when we write out the table. - DecoderSet::const_iterator P = find(Decoders, Decoder.str()); - return std::distance(Decoders.begin(), P); + TableInfo.insertDecoder(Decoder); + return TableInfo.getDecoderIndex(Decoder); } // If ParenIfBinOp is true, print a surrounding () if Val uses && or ||. @@ -1154,12 +1169,8 @@ unsigned DecoderTableBuilder::getPredicateIndex(StringRef Predicate) const { // performance concern, we can implement a mangling of the predicate // data easily enough with a map back to the actual string. That's // overkill for now, though. - - // Make sure the predicate is in the table. - TableInfo.Predicates.insert(CachedHashString(Predicate)); - // Now figure out the index for when we write out the table. - PredicateSet::const_iterator P = find(TableInfo.Predicates, Predicate); - return (unsigned)(P - TableInfo.Predicates.begin()); + TableInfo.insertPredicate(Predicate); + return TableInfo.getPredicateIndex(Predicate); } void DecoderTableBuilder::emitPredicateTableEntry(unsigned EncodingID) const {