[llvm] 9f5a670 - [TableGen] !subst on a dag should retain name of operator (#141195)

via llvm-commits llvm-commits at lists.llvm.org
Fri May 23 12:04:00 PDT 2025


Author: Adam Nemet
Date: 2025-05-23T12:03:56-07:00
New Revision: 9f5a67029721ce8e9a09a29e142010e20d184710

URL: https://github.com/llvm/llvm-project/commit/9f5a67029721ce8e9a09a29e142010e20d184710
DIFF: https://github.com/llvm/llvm-project/commit/9f5a67029721ce8e9a09a29e142010e20d184710.diff

LOG: [TableGen] !subst on a dag should retain name of operator (#141195)

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))
```

Added: 
    llvm/test/TableGen/dag-subst.td

Modified: 
    llvm/lib/TableGen/Record.cpp

Removed: 
    


################################################################################
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