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
This commit is contained in:
Bruno Cardoso Lopes 2010-06-23 19:50:39 +00:00
parent f0763e6300
commit fe5b207577
2 changed files with 25 additions and 1 deletions

View File

@ -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>;

View File

@ -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;
}