[clang] [clang-format] Fix TableGen nested DAGArg format (PR #155837)
Hirofumi Nakamura via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 30 22:46:53 PDT 2025
https://github.com/hnakamura5 updated https://github.com/llvm/llvm-project/pull/155837
>From 2cc33a8a0d2cb266a52483c6bb5bcc2e95564db9 Mon Sep 17 00:00:00 2001
From: hnakamura5 <k.nakamura.hirofumi at gmail.com>
Date: Thu, 28 Aug 2025 22:28:56 +0900
Subject: [PATCH 1/2] [clang-format] Fix TableGen nested DAGArg format
---
clang/lib/Format/TokenAnnotator.cpp | 13 ++++++++++++-
clang/unittests/Format/FormatTestTableGen.cpp | 11 +++++++++--
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index a220de54f46bf..997fcfc2159dc 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -1045,6 +1045,14 @@ class AnnotatingParser {
}
}
// Parse the [DagArgList] part
+ return parseTableGenDAGArgList(Opener, BreakInside);
+ }
+
+ // DagArgList ::= "," DagArg [DagArgList]
+ // This parses SimpleValue 6's [DagArgList] part.
+ bool parseTableGenDAGArgList(FormatToken *Opener, bool BreakInside) {
+ ScopedContextCreator ContextCreator(*this, tok::l_paren, 1);
+ Contexts.back().IsTableGenDAGArgList = true;
bool FirstDAGArgListElm = true;
while (CurrentToken) {
if (!FirstDAGArgListElm && CurrentToken->is(tok::comma)) {
@@ -1101,6 +1109,9 @@ class AnnotatingParser {
// SimpleValue6 ::= "(" DagArg [DagArgList] ")"
if (Tok->is(tok::l_paren)) {
Tok->setType(TT_TableGenDAGArgOpener);
+ // Nested DAGArg requires space before '(' as separator.
+ if (Contexts.back().IsTableGenDAGArgList)
+ Tok->SpacesRequiredBefore = 1;
return parseTableGenDAGArgAndList(Tok);
}
// SimpleValue 9: Bang operator
@@ -2138,7 +2149,7 @@ class AnnotatingParser {
// Whether the braces may mean concatenation instead of structure or array
// literal.
bool VerilogMayBeConcatenation = false;
- bool IsTableGenDAGArg = false;
+ bool IsTableGenDAGArgList = false;
bool IsTableGenBangOpe = false;
bool IsTableGenCondOpe = false;
enum {
diff --git a/clang/unittests/Format/FormatTestTableGen.cpp b/clang/unittests/Format/FormatTestTableGen.cpp
index 1c3d187de393c..33acd2435d289 100644
--- a/clang/unittests/Format/FormatTestTableGen.cpp
+++ b/clang/unittests/Format/FormatTestTableGen.cpp
@@ -185,11 +185,18 @@ TEST_F(FormatTestTableGen, SimpleValue6) {
" i32:$dst6, // dst6\n"
" i32:$dst7 // dst7\n"
" );\n"
- " let DAGArgBang = (!cast<SomeType>(\"Some\") i32:$src1,\n"
- " i32:$src2);\n"
+ " let DAGArgBang =\n"
+ " (!cast<SomeType>(\"Some\") i32:$src1, i32:$src2);\n"
+ " let NestedDAGArg = ((DAGArg1 (v111 v112, v113), v12) v2,\n"
+ " (DAGArg3 (v31 v32)));\n"
"}");
}
+TEST_F(FormatTestTableGen, SimpleValue6_NestedInPat) {
+ verifyFormat("def : Pat<(vec.vt (avg (vec.vt V128:$l), (vec.vt V128:$r))),\n"
+ " (inst $l, $r)>;");
+}
+
TEST_F(FormatTestTableGen, SimpleValue7) {
verifyFormat("def SimpleValue7 { let Identifier = SimpleValue; }");
}
>From da67c7be13ecefa37d52542618bf9a9a6b302262 Mon Sep 17 00:00:00 2001
From: hnakamura5 <k.nakamura.hirofumi at gmail.com>
Date: Sun, 31 Aug 2025 14:46:38 +0900
Subject: [PATCH 2/2] Changed Context's BindingStrength Increase to 0
---
clang/lib/Format/TokenAnnotator.cpp | 2 +-
clang/unittests/Format/FormatTestTableGen.cpp | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 997fcfc2159dc..27a90ed54aa0f 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -1051,7 +1051,7 @@ class AnnotatingParser {
// DagArgList ::= "," DagArg [DagArgList]
// This parses SimpleValue 6's [DagArgList] part.
bool parseTableGenDAGArgList(FormatToken *Opener, bool BreakInside) {
- ScopedContextCreator ContextCreator(*this, tok::l_paren, 1);
+ ScopedContextCreator ContextCreator(*this, tok::l_paren, 0);
Contexts.back().IsTableGenDAGArgList = true;
bool FirstDAGArgListElm = true;
while (CurrentToken) {
diff --git a/clang/unittests/Format/FormatTestTableGen.cpp b/clang/unittests/Format/FormatTestTableGen.cpp
index 33acd2435d289..df20cc26e1094 100644
--- a/clang/unittests/Format/FormatTestTableGen.cpp
+++ b/clang/unittests/Format/FormatTestTableGen.cpp
@@ -185,8 +185,8 @@ TEST_F(FormatTestTableGen, SimpleValue6) {
" i32:$dst6, // dst6\n"
" i32:$dst7 // dst7\n"
" );\n"
- " let DAGArgBang =\n"
- " (!cast<SomeType>(\"Some\") i32:$src1, i32:$src2);\n"
+ " let DAGArgBang = (!cast<SomeType>(\"Some\") i32:$src1,\n"
+ " i32:$src2);\n"
" let NestedDAGArg = ((DAGArg1 (v111 v112, v113), v12) v2,\n"
" (DAGArg3 (v31 v32)));\n"
"}");
More information about the cfe-commits
mailing list