diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-06-23 19:50:39 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-06-23 19:50:39 +0000 |
| commit | 30a28d658832fe58b5bcdf2225751bded9cc0e1d (patch) | |
| tree | c20505ed90dbe4d6e3012e5aa8e1295de190d6a8 /llvm | |
| parent | d3e231eb3ce6a2a9933da063ab85445baefe36e7 (diff) | |
| download | bcm5719-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.td | 24 | ||||
| -rw-r--r-- | llvm/utils/TableGen/Record.cpp | 2 |
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; } |

