[llvm] [NFC][TableGen] Code cleanup in StringMatcher (PR #141118)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 22 15:27:12 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-tablegen
Author: Rahul Joshi (jurahul)
<details>
<summary>Changes</summary>
- Use ArrayRef instead of const vector reference.
- Use range for loops with enumerate and structured bindings.
---
Full diff: https://github.com/llvm/llvm-project/pull/141118.diff
2 Files Affected:
- (modified) llvm/include/llvm/TableGen/StringMatcher.h (+6-6)
- (modified) llvm/lib/TableGen/StringMatcher.cpp (+15-18)
``````````diff
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";
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/141118
More information about the llvm-commits
mailing list