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