summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-06-23 19:50:39 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-06-23 19:50:39 +0000
commit30a28d658832fe58b5bcdf2225751bded9cc0e1d (patch)
treec20505ed90dbe4d6e3012e5aa8e1295de190d6a8 /llvm
parentd3e231eb3ce6a2a9933da063ab85445baefe36e7 (diff)
downloadbcm5719-llvm-30a28d658832fe58b5bcdf2225751bded9cc0e1d.tar.gz
bcm5719-llvm-30a28d658832fe58b5bcdf2225751bded9cc0e1d.zip
Fix a tblgen bug.
Given the pattern below as an example: list<dag> Pattern = [(set RC:$dst, (v4f32 (shufp:src3 RC:$src1, (mem_frag addr:$src2))))]; The right reference resolving should lead to: list<dag> Pattern = [(set VR128:$dst, (v4f32 (shufp:src3 VR128:$src1, (mem_frag addr:$src2))))]; But was yielding: list<dag> Pattern = [(set VR128:$dst, (v4f32 (shufp VR128:$src1, (mem_frag addr:$src2))))]; Fix this by passing the right name when creating a new DagInit node. llvm-svn: 106670
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/TableGen/usevalname.td24
-rw-r--r--llvm/utils/TableGen/Record.cpp2
2 files changed, 25 insertions, 1 deletions
diff --git a/llvm/test/TableGen/usevalname.td b/llvm/test/TableGen/usevalname.td
new file mode 100644
index 00000000000..1b31c8f1506
--- /dev/null
+++ b/llvm/test/TableGen/usevalname.td
@@ -0,0 +1,24 @@
+// RUN: tblgen %s | FileCheck %s
+// XFAIL: vg_leak
+
+class Instr<list<dag> pat> {
+ list<dag> Pattern = pat;
+}
+
+class Reg {
+ int a = 3;
+}
+
+def VR128 : Reg;
+def mem_frag;
+def set;
+def addr;
+def shufp : Reg;
+
+multiclass shuffle<Reg RC> {
+ def rri : Instr<[(set RC:$dst, (shufp:$src3
+ RC:$src1, RC:$src2))]>;
+}
+
+// CHECK: shufp:src3
+defm ADD : shuffle<VR128>;
diff --git a/llvm/utils/TableGen/Record.cpp b/llvm/utils/TableGen/Record.cpp
index 5a69edb615d..d2cf379907f 100644
--- a/llvm/utils/TableGen/Record.cpp
+++ b/llvm/utils/TableGen/Record.cpp
@@ -1262,7 +1262,7 @@ Init *DagInit::resolveReferences(Record &R, const RecordVal *RV) {
Init *Op = Val->resolveReferences(R, RV);
if (Args != NewArgs || Op != Val)
- return new DagInit(Op, "", NewArgs, ArgNames);
+ return new DagInit(Op, ValName, NewArgs, ArgNames);
return this;
}
OpenPOWER on IntegriCloud