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