1 // RUN: llvm-tblgen %s | FileCheck %s 2 // XFAIL: vg_leak 3 4 // Tests evaluation of !foreach operator. 5 6 def d0; 7 def d1; 8 def d2; 9 def d3; 10 def d4; 11 12 class 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 d 25 // CHECK: dag r1 = (d0 d0, d0, d0, d0); 26 // CHECK: list<dag> r2 = [(d0 d0, d0, d0, d0)]; 27 def d : D <(d0 d1, d2, d3, d4)>; 28 29 class 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 i 38 // CHECK: list<int> r1 = [8, 9, 10]; 39 // CHECK: list<list<int>> r2 = [{{[[]}}8, 9, 10]]; 40 def i : I<[1,2,3]>; 41 42 class J0<list<dag> pattern> { 43 list<dag> Pattern = pattern; 44 } 45 class J1<dag pattern> 46 : J0<[!foreach(tmp, pattern, !subst(d1, d0, 47 !subst(d2, d0, 48 !subst(d3, d0, 49 !subst(d4, d0, tmp)))))]>; 50 class 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 j1 57 // CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))]; 58 def j1 : J1< (d1 d2:$dst, (d3 d4:$src1))>; 59 // CHECK-LABEL: def j2 60 // CHECK: list<dag> Pattern = [(d0 d0:$dst, (d0 d0:$src1))]; 61 def j2 : J2< [(d1 d2:$dst, (d3 d4:$src1))]>; 62 63