xref: /aosp_15_r20/external/llvm/test/TableGen/Dag.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker// XFAIL: vg_leak
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
5*9880d681SAndroid Build Coastguard Worker// Substitution of an int.
6*9880d681SAndroid Build Coastguard Workerdef X1;
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerclass C1<int N> {
9*9880d681SAndroid Build Coastguard Worker  dag d = (X1 N);
10*9880d681SAndroid Build Coastguard Worker}
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdef VAL1 : C1<13>;
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// CHECK: def VAL1 {
15*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: dag d = (X1 13)
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
19*9880d681SAndroid Build Coastguard Worker// Substitution of a DAG.
20*9880d681SAndroid Build Coastguard Workerdef X2;
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerclass yclass;
23*9880d681SAndroid Build Coastguard Workerdef Y2 : yclass;
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerclass C2<yclass N> {
26*9880d681SAndroid Build Coastguard Worker  dag d = (X2 N);
27*9880d681SAndroid Build Coastguard Worker  dag e = (N X2);
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdef VAL2 : C2<Y2>;
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker// CHECK: def VAL2 {
33*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: dag d = (X2 Y2)
34*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: dag e = (Y2 X2)
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
38*9880d681SAndroid Build Coastguard Worker// Complex dag operator (F.TheOp).
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerclass operator;
41*9880d681SAndroid Build Coastguard Workerdef somedef1 : operator;
42*9880d681SAndroid Build Coastguard Workerdef somedef2 : operator;
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerclass foo<operator a> {
45*9880d681SAndroid Build Coastguard Worker operator TheOp = a;
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerclass bar<foo F, operator a> {
49*9880d681SAndroid Build Coastguard Worker  dag Dag1 = (somedef1 1);
50*9880d681SAndroid Build Coastguard Worker  dag Dag2 = (a 2);
51*9880d681SAndroid Build Coastguard Worker  dag Dag3 = (F.TheOp 2);
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdef foo1 : foo<somedef1>;
55*9880d681SAndroid Build Coastguard Workerdef foo2 : foo<somedef2>;
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdef VAL3 : bar<foo1, somedef1>;
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker// CHECK:     def VAL3 {	// bar
60*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag1 = (somedef1 1);
61*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag2 = (somedef1 2);
62*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag3 = (somedef1 2);
63*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  NAME = ?
64*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: }
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerdef VAL4 : bar<foo2, somedef2>;
68*9880d681SAndroid Build Coastguard Worker// CHECK:      def VAL4 {
69*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag1 = (somedef1 1);
70*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag2 = (somedef2 2);
71*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag3 = (somedef2 2);
72*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  NAME = ?
73*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: }
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdef VAL5 : bar<foo2, somedef2> {
76*9880d681SAndroid Build Coastguard Worker  // Named operands.
77*9880d681SAndroid Build Coastguard Worker  let Dag1 = (somedef1 1:$name1);
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker  // Name, no node.
80*9880d681SAndroid Build Coastguard Worker  let Dag2 = (somedef2 $name2, $name3);
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker// CHECK:      def VAL5 {
84*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag1 = (somedef1 1:$name1);
85*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT:  dag Dag2 = (somedef2 ?:$name2, ?:$name3);
86