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