63 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2// XFAIL: vg_leak3 4// Tests evaluation of !foreach operator.5 6def d0;7def d1;8def d2;9def d3;10def d4;11 12class D<dag d> {13 dag r1 = !foreach(tmp, d, !subst(d1, d0, !subst(d2, d0,14 !subst(d3, d0,15 !subst(d4, d0, tmp)))));16 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 d25// 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> {30 list<int> r1 = !foreach(tmp, i, !add(3, !add(4, tmp)));31 32 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 i38// CHECK: list<int> r1 = [8, 9, 10];39// CHECK: list<list<int>> r2 = [{{[[]}}8, 9, 10]];40def i : I<[1,2,3]>;41 42class J0<list<dag> pattern> {43 list<dag> Pattern = pattern;44}45class J1<dag pattern>46 : J0<[!foreach(tmp, pattern, !subst(d1, d0,47 !subst(d2, d0,48 !subst(d3, d0,49 !subst(d4, d0, tmp)))))]>;50class J2<list<dag> patterns>51 : J0<!foreach(t0, patterns,52 !foreach(t1, t0, !subst(d1, d0,53 !subst(d2, d0,54 !subst(d3, d0,55 !subst(d4, d0, t1))))))>;56// CHECK-LABEL: def j157// CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))];58def j1 : J1< (d1 d2:$dst, (d3 d4:$src1))>;59// CHECK-LABEL: def j260// CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))];61def j2 : J2< [(d1 d2:$dst, (d3 d4:$src1))]>;62 63