139 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2// XFAIL: vg_leak3 4// CHECK: --- Defs ---5 6// CHECK: def A00 {7// CHECK: int sum = 7;8// CHECK: }9 10// CHECK: def A01 {11// CHECK: int sum = 8;12// CHECK: }13 14// CHECK-NOT: def B015 16// CHECK: def B12 {17// CHECK: int val = 9;18// CHECK: }19 20// CHECK: def B20 {21// CHECK: int val = 7;22// CHECK: }23 24// CHECK: def B24 {25// CHECK: int val = 11;26// CHECK: }27 28// CHECK: def B25 {29// CHECK: int val = 12;30// CHECK: }31 32// CHECK: def C0433// CHECK: def C0534 35// CHECK: def D0A36// CHECK-NOT: def D0B37// CHECK: def D1A38// CHECK: def D1B39 40// CHECK: def E0141// CHECK: def E0242// CHECK-NOT: def E0C43 44// CHECK: def E1845// CHECK: def E1946// CHECK: def E1C3347// CHECK: def E1C3448// CHECK: def E1C5549// CHECK: def E1C5650 51// CHECK-NOT: def F052// CHECK-NOT: def F153// CHECK-NOT: def F2_0_054// CHECK: def F2_1_055// CHECK-NOT: def F2_1_256// CHECK: def F2_2_057// CHECK: def F2_2_158// CHECK-NOT: def F2_2_259 60// CHECK: def G061// CHECK: def H0_G0_062 63multiclass A<int x> {64 foreach i = [0, 1] in {65 def NAME#i {66 int sum = !add(x, i);67 }68 }69}70 71defm A0 : A<7>;72 73multiclass B<int x, list<int> lst> {74 foreach i = lst in {75 def NAME#i {76 int val = !add(x, i);77 }78 }79}80 81defm B0 : B<7, []>;82defm B1 : B<7, [2]>;83defm B2 : B<7, [0, 4, 5]>;84 85multiclass C<int x> {86 foreach i = [x, !add(x, 1)] in {87 def NAME#i;88 }89}90 91defm C0 : C<4>;92 93multiclass D<bit b> {94 def A;95 96 foreach _ = !if(b, [0], []<int>) in97 def B;98}99 100defm D0 : D<0>;101defm D1 : D<1>;102 103multiclass E<list<int> lst, int x>104 : C<x> {105 foreach i = lst in106 defm C#i : C<i>;107}108 109defm E0 : E<[], 1>;110defm E1 : E<[3, 5], 8>;111 112multiclass F<list<int> lst> {113 foreach i = lst in114 foreach j = !foldl([]<int>, lst, lhs, x,115 !if(!lt(x, i), !listconcat(lhs, [x]), lhs)) in116 def _#i#_#j;117}118 119defm F0 : F<[]>;120defm F1 : F<[0]>;121defm F2 : F<[0, 1, 2]>;122 123// If multiclass argument comes from loop variable,124// and field of argument is placed at foreach statement,125// the record field must be resolved correctly.126class G {127 list<int> val = [0];128}129 130multiclass H<G g> {131 foreach n = g.val in132 def _#g#_#n;133}134 135def G0 : G;136 137foreach g = [G0] in138 defm H0 : H<g>;139