aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/DecoderEmitter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/TableGen/DecoderEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/DecoderEmitter.cpp37
1 files changed, 24 insertions, 13 deletions
diff --git a/llvm/utils/TableGen/DecoderEmitter.cpp b/llvm/utils/TableGen/DecoderEmitter.cpp
index a54e6d0..393a318 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<StringRef, std::set<unsigned>>;
@@ -1087,13 +1107,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);
}
// Returns true if there was any predicate emitted.
@@ -1117,12 +1132,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 {