mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
54da09356b
In historical reason, tblgen is not strictly required to be free from memory leaks. For now, I mark them as XFAIL, they could be fixed, though. llvm-svn: 194353
86 lines
1.7 KiB
TableGen
86 lines
1.7 KiB
TableGen
// RUN: llvm-tblgen %s | FileCheck %s
|
|
// XFAIL: vg_leak
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Substitution of an int.
|
|
def X1;
|
|
|
|
class C1<int N> {
|
|
dag d = (X1 N);
|
|
}
|
|
|
|
def VAL1 : C1<13>;
|
|
|
|
// CHECK: def VAL1 {
|
|
// CHECK-NEXT: dag d = (X1 13)
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Substitution of a DAG.
|
|
def X2;
|
|
|
|
class yclass;
|
|
def Y2 : yclass;
|
|
|
|
class C2<yclass N> {
|
|
dag d = (X2 N);
|
|
dag e = (N X2);
|
|
}
|
|
|
|
def VAL2 : C2<Y2>;
|
|
|
|
// CHECK: def VAL2 {
|
|
// CHECK-NEXT: dag d = (X2 Y2)
|
|
// CHECK-NEXT: dag e = (Y2 X2)
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Complex dag operator (F.TheOp).
|
|
|
|
class operator;
|
|
def somedef1 : operator;
|
|
def somedef2 : operator;
|
|
|
|
class foo<operator a> {
|
|
operator TheOp = a;
|
|
}
|
|
|
|
class bar<foo F, operator a> {
|
|
dag Dag1 = (somedef1 1);
|
|
dag Dag2 = (a 2);
|
|
dag Dag3 = (F.TheOp 2);
|
|
}
|
|
|
|
def foo1 : foo<somedef1>;
|
|
def foo2 : foo<somedef2>;
|
|
|
|
def VAL3 : bar<foo1, somedef1>;
|
|
|
|
// CHECK: def VAL3 { // bar
|
|
// CHECK-NEXT: dag Dag1 = (somedef1 1);
|
|
// CHECK-NEXT: dag Dag2 = (somedef1 2);
|
|
// CHECK-NEXT: dag Dag3 = (somedef1 2);
|
|
// CHECK-NEXT: NAME = ?
|
|
// CHECK-NEXT: }
|
|
|
|
|
|
def VAL4 : bar<foo2, somedef2>;
|
|
// CHECK: def VAL4 {
|
|
// CHECK-NEXT: dag Dag1 = (somedef1 1);
|
|
// CHECK-NEXT: dag Dag2 = (somedef2 2);
|
|
// CHECK-NEXT: dag Dag3 = (somedef2 2);
|
|
// CHECK-NEXT: NAME = ?
|
|
// CHECK-NEXT: }
|
|
|
|
def VAL5 : bar<foo2, somedef2> {
|
|
// Named operands.
|
|
let Dag1 = (somedef1 1:$name1);
|
|
|
|
// Name, no node.
|
|
let Dag2 = (somedef2 $name2, $name3);
|
|
}
|
|
|
|
// CHECK: def VAL5 {
|
|
// CHECK-NEXT: dag Dag1 = (somedef1 1:$name1);
|
|
// CHECK-NEXT: dag Dag2 = (somedef2 ?:$name2, ?:$name3);
|