blob: 227475f9df4ef141b46cd2d12a242b4f65617391 [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> {
Artem Belevichd75805e2018-02-09 18:37:55 +000013 dag r1 = !foreach(tmp, d, !subst(d1, d0, !subst(d2, d0,
14 !subst(d3, d0,
15 !subst(d4, d0, tmp)))));
Artem Belevichd75805e2018-02-09 18:37:55 +000016 list<dag> dl = [d];
17 list<dag> r2 = !foreach(tmp2, dl,
18 !foreach(tmp, tmp2, !subst(d1, d0,
19 !subst(d2, d0,
20 !subst(d3, d0,
21 !subst(d4, d0, tmp))))));
22}
23
24// CHECK-LABEL: def d
25// CHECK: dag r1 = (d0 d0, d0, d0, d0);
26// CHECK: list<dag> r2 = [(d0 d0, d0, d0, d0)];
27def d : D <(d0 d1, d2, d3, d4)>;
28
29class I<list<int> i> {
Artem Belevichd75805e2018-02-09 18:37:55 +000030 list<int> r1 = !foreach(tmp, i, !add(3, !add(4, tmp)));
31
Artem Belevichd75805e2018-02-09 18:37:55 +000032 list<list<int>> li = [i];
33 list<list<int>> r2 = !foreach(tmp2, li,
34 !foreach(tmp, tmp2, !add(3, !add(4, tmp))));
35}
36
37// CHECK-LABEL: def i
38// CHECK: list<int> r1 = [8, 9, 10];
39// CHECK: list<list<int>> r2 = [{{[[]}}8, 9, 10]];
40def i : I<[1,2,3]>;
41
Artem Belevichd75805e2018-02-09 18:37:55 +000042class J0<list<dag> pattern> {
43 list<dag> Pattern = pattern;
44}
45class J1<dag pattern>
Nicolai Haehnle8ebf7e42018-03-05 15:21:04 +000046 : J0<[!foreach(tmp, pattern, !subst(d1, d0,
47 !subst(d2, d0,
48 !subst(d3, d0,
49 !subst(d4, d0, tmp)))))]>;
Artem Belevichd75805e2018-02-09 18:37:55 +000050class J2<list<dag> patterns>
Nicolai Haehnle8ebf7e42018-03-05 15:21:04 +000051 : J0<!foreach(t0, patterns,
52 !foreach(t1, t0, !subst(d1, d0,
53 !subst(d2, d0,
54 !subst(d3, d0,
55 !subst(d4, d0, t1))))))>;
Artem Belevichd75805e2018-02-09 18:37:55 +000056// CHECK-LABEL: def j1
57// CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))];
58def j1 : J1< (d1 d2:$dst, (d3 d4:$src1))>;
59// CHECK-LABEL: def j2
60// CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))];
61def j2 : J2< [(d1 d2:$dst, (d3 d4:$src1))]>;
62