[llvm] [NFC][TableGen] Code cleanup in StringMatcher (PR #141118)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Thu May 22 11:15:13 PDT 2025
https://github.com/jurahul created https://github.com/llvm/llvm-project/pull/141118
- Use ArrayRef instead of const vector reference.
- Use range for loops with enumerate and structured bindings.
>From 93ea8dda9552a8242f1cb42610164dbad23afab4 Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Thu, 22 May 2025 11:07:45 -0700
Subject: [PATCH] [NFC][TableGen] Code cleanup in StringMatcher
---
llvm/include/llvm/TableGen/StringMatcher.h | 12 ++++----
llvm/lib/TableGen/StringMatcher.cpp | 33 ++++++++++------------
2 files changed, 21 insertions(+), 24 deletions(-)
diff --git a/llvm/include/llvm/TableGen/StringMatcher.h b/llvm/include/llvm/TableGen/StringMatcher.h
index 795b7a6d41dcc..49769883a98b4 100644
--- a/llvm/include/llvm/TableGen/StringMatcher.h
+++ b/llvm/include/llvm/TableGen/StringMatcher.h
@@ -13,10 +13,10 @@
#ifndef LLVM_TABLEGEN_STRINGMATCHER_H
#define LLVM_TABLEGEN_STRINGMATCHER_H
+#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include <string>
#include <utility>
-#include <vector>
namespace llvm {
@@ -33,18 +33,18 @@ class StringMatcher {
private:
StringRef StrVariableName;
- const std::vector<StringPair> &Matches;
+ ArrayRef<StringPair> Matches;
raw_ostream &OS;
public:
- StringMatcher(StringRef strVariableName,
- const std::vector<StringPair> &matches, raw_ostream &os)
- : StrVariableName(strVariableName), Matches(matches), OS(os) {}
+ StringMatcher(StringRef StrVariableName, ArrayRef<StringPair> Matches,
+ raw_ostream &OS)
+ : StrVariableName(StrVariableName), Matches(Matches), OS(OS) {}
void Emit(unsigned Indent = 0, bool IgnoreDuplicates = false) const;
private:
- bool EmitStringMatcherForChar(const std::vector<const StringPair *> &Matches,
+ bool EmitStringMatcherForChar(ArrayRef<const StringPair *> Matches,
unsigned CharNo, unsigned IndentCount,
bool IgnoreDuplicates) const;
};
diff --git a/llvm/lib/TableGen/StringMatcher.cpp b/llvm/lib/TableGen/StringMatcher.cpp
index c169b4e0a3620..b85849e40bb5e 100644
--- a/llvm/lib/TableGen/StringMatcher.cpp
+++ b/llvm/lib/TableGen/StringMatcher.cpp
@@ -26,16 +26,13 @@ using namespace llvm;
/// string pairs that is not shared across the whole set of strings. All
/// strings are assumed to have the same length.
static unsigned
-FindFirstNonCommonLetter(const std::vector<const
- StringMatcher::StringPair*> &Matches) {
+FindFirstNonCommonLetter(ArrayRef<const StringMatcher::StringPair *> Matches) {
assert(!Matches.empty());
- for (unsigned i = 0, e = Matches[0]->first.size(); i != e; ++i) {
- // Check to see if letter i is the same across the set.
- char Letter = Matches[0]->first[i];
-
+ for (auto [Idx, Letter] : enumerate(Matches[0]->first)) {
+ // Check to see if `Letter` is the same across the set.
for (const StringMatcher::StringPair *Match : Matches)
- if (Match->first[i] != Letter)
- return i;
+ if (Match->first[Idx] != Letter)
+ return Idx;
}
return Matches[0]->first.size();
@@ -47,8 +44,8 @@ FindFirstNonCommonLetter(const std::vector<const
///
/// \return - True if control can leave the emitted code fragment.
bool StringMatcher::EmitStringMatcherForChar(
- const std::vector<const StringPair *> &Matches, unsigned CharNo,
- unsigned IndentCount, bool IgnoreDuplicates) const {
+ ArrayRef<const StringPair *> Matches, unsigned CharNo, unsigned IndentCount,
+ bool IgnoreDuplicates) const {
assert(!Matches.empty() && "Must have at least one string to match!");
std::string Indent(IndentCount * 2 + 4, ' ');
@@ -110,14 +107,14 @@ bool StringMatcher::EmitStringMatcherForChar(
OS << Indent << "switch (" << StrVariableName << "[" << CharNo << "]) {\n";
OS << Indent << "default: break;\n";
- for (const auto &LI : MatchesByLetter) {
+ for (const auto &[Letter, Matches] : MatchesByLetter) {
// TODO: escape hard stuff (like \n) if we ever care about it.
- OS << Indent << "case '" << LI.first << "':\t // " << LI.second.size()
+ OS << Indent << "case '" << Letter << "':\t // " << Matches.size()
<< " string";
- if (LI.second.size() != 1)
+ if (Matches.size() != 1)
OS << 's';
OS << " to match.\n";
- if (EmitStringMatcherForChar(LI.second, CharNo + 1, IndentCount + 1,
+ if (EmitStringMatcherForChar(Matches, CharNo + 1, IndentCount + 1,
IgnoreDuplicates))
OS << Indent << " break;\n";
}
@@ -143,11 +140,11 @@ void StringMatcher::Emit(unsigned Indent, bool IgnoreDuplicates) const {
OS.indent(Indent*2+2) << "switch (" << StrVariableName << ".size()) {\n";
OS.indent(Indent*2+2) << "default: break;\n";
- for (const auto &LI : MatchesByLength) {
+ for (const auto &[Length, Matches] : MatchesByLength) {
OS.indent(Indent * 2 + 2)
- << "case " << LI.first << ":\t // " << LI.second.size() << " string"
- << (LI.second.size() == 1 ? "" : "s") << " to match.\n";
- if (EmitStringMatcherForChar(LI.second, 0, Indent, IgnoreDuplicates))
+ << "case " << Length << ":\t // " << Matches.size() << " string"
+ << (Matches.size() == 1 ? "" : "s") << " to match.\n";
+ if (EmitStringMatcherForChar(Matches, 0, Indent, IgnoreDuplicates))
OS.indent(Indent*2+4) << "break;\n";
}
More information about the llvm-commits
mailing list