[llvm] [TableGen] !subst on a dag should retain name of operator (PR #141195)
Adam Nemet via llvm-commits
llvm-commits at lists.llvm.org
Fri May 23 12:02:56 PDT 2025
https://github.com/anemet updated https://github.com/llvm/llvm-project/pull/141195
>From ee9125149a1991321362fe0eee2a15ee66a4993b Mon Sep 17 00:00:00 2001
From: Adam Nemet <anemet at apple.com>
Date: Thu, 22 May 2025 19:32:46 -0700
Subject: [PATCH] [TableGen] !subst on a dag should retain name of operator
Without this patch the !subst in the test drops the name "$frag" from
(one_frag:$frag ...) and returns:
```
(set FPR32_NEW:$dst, (one_frag FPR32_NEW:$a, FPR32_NEW:$b))
```
---
llvm/lib/TableGen/Record.cpp | 2 +-
llvm/test/TableGen/dag-subst.td | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/TableGen/dag-subst.td
diff --git a/llvm/lib/TableGen/Record.cpp b/llvm/lib/TableGen/Record.cpp
index 12f5ce6175dbf..4c8b41237c604 100644
--- a/llvm/lib/TableGen/Record.cpp
+++ b/llvm/lib/TableGen/Record.cpp
@@ -1688,7 +1688,7 @@ static const Init *ForeachDagApply(const Init *LHS, const DagInit *MHSd,
}
if (Change)
- return DagInit::get(Val, NewArgs);
+ return DagInit::get(Val, MHSd->getName(), NewArgs);
return MHSd;
}
diff --git a/llvm/test/TableGen/dag-subst.td b/llvm/test/TableGen/dag-subst.td
new file mode 100644
index 0000000000000..0844451407076
--- /dev/null
+++ b/llvm/test/TableGen/dag-subst.td
@@ -0,0 +1,18 @@
+// RUN: llvm-tblgen %s | FileCheck %s
+
+// Operator name "frg" in one_frag:$frg was not retained during !subst.
+
+def one_frag;
+def FPR32;
+def ops;
+def node;
+def GPR;
+def cond;
+def set;
+def FPR32_NEW;
+def a {
+ dag d = (set FPR32:$dst, (one_frag:$frg FPR32:$a, FPR32:$b));
+ dag n = !foreach(i, d, !subst(FPR32, FPR32_NEW, i));
+}
+
+// CHECK: dag n = (set FPR32_NEW:$dst, (one_frag:$frg FPR32_NEW:$a, FPR32_NEW:$b));
More information about the llvm-commits
mailing list