Nicolai Haehnle | 420e28c | 2018-03-21 17:12:53 +0000 | [diff] [blame] | 1 | // RUN: llvm-tblgen %s | FileCheck %s |
| 2 | // XFAIL: vg_leak |
| 3 | |
| 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 | |
Nicolai Haehnle | 7d69e0f | 2018-06-21 13:35:44 +0000 | [diff] [blame] | 14 | // CHECK-NOT: def B0 |
| 15 | |
| 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 C04 |
| 33 | // CHECK: def C05 |
| 34 | |
| 35 | // CHECK: def D0A |
| 36 | // CHECK-NOT: def D0B |
| 37 | // CHECK: def D1A |
| 38 | // CHECK: def D1B |
| 39 | |
| 40 | // CHECK: def E01 |
| 41 | // CHECK: def E02 |
| 42 | // CHECK-NOT: def E0C |
| 43 | |
| 44 | // CHECK: def E18 |
| 45 | // CHECK: def E19 |
| 46 | // CHECK: def E1C33 |
| 47 | // CHECK: def E1C34 |
| 48 | // CHECK: def E1C55 |
| 49 | // CHECK: def E1C56 |
| 50 | |
| 51 | // CHECK-NOT: def F0 |
| 52 | // CHECK-NOT: def F1 |
| 53 | // CHECK-NOT: def F2_0_0 |
| 54 | // CHECK: def F2_1_0 |
| 55 | // CHECK-NOT: def F2_1_2 |
| 56 | // CHECK: def F2_2_0 |
| 57 | // CHECK: def F2_2_1 |
| 58 | // CHECK-NOT: def F2_2_2 |
| 59 | |
Nicolai Haehnle | 420e28c | 2018-03-21 17:12:53 +0000 | [diff] [blame] | 60 | multiclass A<int x> { |
Nicolai Haehnle | 420e28c | 2018-03-21 17:12:53 +0000 | [diff] [blame] | 61 | foreach i = [0, 1] in { |
| 62 | def NAME#i { |
| 63 | int sum = !add(x, i); |
| 64 | } |
| 65 | } |
| 66 | } |
| 67 | |
| 68 | defm A0 : A<7>; |
Nicolai Haehnle | 7d69e0f | 2018-06-21 13:35:44 +0000 | [diff] [blame] | 69 | |
| 70 | multiclass B<int x, list<int> lst> { |
| 71 | foreach i = lst in { |
| 72 | def NAME#i { |
| 73 | int val = !add(x, i); |
| 74 | } |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | defm B0 : B<7, []>; |
| 79 | defm B1 : B<7, [2]>; |
| 80 | defm B2 : B<7, [0, 4, 5]>; |
| 81 | |
| 82 | multiclass C<int x> { |
| 83 | foreach i = [x, !add(x, 1)] in { |
| 84 | def NAME#i; |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | defm C0 : C<4>; |
| 89 | |
| 90 | multiclass D<bit b> { |
| 91 | def A; |
| 92 | |
| 93 | foreach _ = !if(b, [0], []<int>) in |
| 94 | def B; |
| 95 | } |
| 96 | |
| 97 | defm D0 : D<0>; |
| 98 | defm D1 : D<1>; |
| 99 | |
| 100 | multiclass E<list<int> lst, int x> |
| 101 | : C<x> { |
| 102 | foreach i = lst in |
| 103 | defm C#i : C<i>; |
| 104 | } |
| 105 | |
| 106 | defm E0 : E<[], 1>; |
| 107 | defm E1 : E<[3, 5], 8>; |
| 108 | |
| 109 | multiclass F<list<int> lst> { |
| 110 | foreach i = lst in |
| 111 | foreach j = !foldl([]<int>, lst, lhs, x, |
| 112 | !if(!lt(x, i), !listconcat(lhs, [x]), lhs)) in |
| 113 | def _#i#_#j; |
| 114 | } |
| 115 | |
| 116 | defm F0 : F<[]>; |
| 117 | defm F1 : F<[0]>; |
| 118 | defm F2 : F<[0, 1, 2]>; |