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