blob: 5bef51e49d52d1ab4520af3137a70c106eb9903a [file] [log] [blame]
Artem Belevichd75805e2018-02-09 18:37:55 +00001// RUN: llvm-tblgen %s | FileCheck %s
2// XFAIL: vg_leak
3
4// Tests evaluation of !foreach operator.
5
6def d0;
7def d1;
8def d2;
9def d3;
10def d4;
11
12class D<dag d> {
13 int tmp;
14 dag r1 = !foreach(tmp, d, !subst(d1, d0, !subst(d2, d0,
15 !subst(d3, d0,
16 !subst(d4, d0, tmp)))));
17 dag tmp2;
18 list<dag> dl = [d];
19 list<dag> r2 = !foreach(tmp2, dl,
20 !foreach(tmp, tmp2, !subst(d1, d0,
21 !subst(d2, d0,
22 !subst(d3, d0,
23 !subst(d4, d0, tmp))))));
24}
25
26// CHECK-LABEL: def d
27// CHECK: dag r1 = (d0 d0, d0, d0, d0);
28// CHECK: list<dag> r2 = [(d0 d0, d0, d0, d0)];
29def d : D <(d0 d1, d2, d3, d4)>;
30
31class I<list<int> i> {
32 int tmp;
33 list<int> r1 = !foreach(tmp, i, !add(3, !add(4, tmp)));
34
35 list<int> tmp2;
36 list<list<int>> li = [i];
37 list<list<int>> r2 = !foreach(tmp2, li,
38 !foreach(tmp, tmp2, !add(3, !add(4, tmp))));
39}
40
41// CHECK-LABEL: def i
42// CHECK: list<int> r1 = [8, 9, 10];
43// CHECK: list<list<int>> r2 = [{{[[]}}8, 9, 10]];
44def i : I<[1,2,3]>;
45
46class Tmp {
47 dag t0;
48 int t1;
49}
50def tmp: Tmp;
51
52class J0<list<dag> pattern> {
53 list<dag> Pattern = pattern;
54}
55class J1<dag pattern>
56 : J0<[!foreach(tmp.t1, pattern, !subst(d1, d0,
57 !subst(d2, d0,
58 !subst(d3, d0,
59 !subst(d4, d0, tmp.t1)))))]>;
60class J2<list<dag> patterns>
61 : J0<!foreach(tmp.t0, patterns,
62 !foreach(tmp.t1, tmp.t0, !subst(d1, d0,
63 !subst(d2, d0,
64 !subst(d3, d0,
65 !subst(d4, d0, tmp.t1))))))>;
66// CHECK-LABEL: def j1
67// CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))];
68def j1 : J1< (d1 d2:$dst, (d3 d4:$src1))>;
69// CHECK-LABEL: def j2
70// CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))];
71def j2 : J2< [(d1 d2:$dst, (d3 d4:$src1))]>;
72