| // 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: } | |
| 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: } |