brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 227475f Raw
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