Home | History | Annotate | Download | only in TableGen
      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 
     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 
     60 multiclass A<int x> {
     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>;
     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]>;
    119