OSDN Git Service

TableGen: Allow arbitrary list values as ranges of foreach
[android-x86/external-llvm.git] / test / TableGen / ForeachList.td
1 // RUN: llvm-tblgen %s | FileCheck %s
2
3 class Register<string name, int idx> {
4   string Name = name;
5   int Index = idx;
6 }
7
8 foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in {
9   def R#i : Register<"R"#i, i>;
10   def F#i : Register<"F"#i, i>;
11 }
12
13 def Defs {
14   list<int> a = [0, 1];
15   list<int> b = [2, 3];
16 }
17
18 foreach i = Defs.a in {
19   def X#i;
20 }
21
22 foreach i = !listconcat(Defs.a, Defs.b) in
23 def Y#i;
24
25 // CHECK: def F0
26 // CHECK: string Name = "F0";
27 // CHECK: int Index = 0;
28
29 // CHECK: def F1
30 // CHECK: string Name = "F1";
31 // CHECK: int Index = 1;
32
33 // CHECK: def F2
34 // CHECK: string Name = "F2";
35 // CHECK: int Index = 2;
36
37 // CHECK: def F3
38 // CHECK: string Name = "F3";
39 // CHECK: int Index = 3;
40
41 // CHECK: def F4
42 // CHECK: string Name = "F4";
43 // CHECK: int Index = 4;
44
45 // CHECK: def F5
46 // CHECK: string Name = "F5";
47 // CHECK: int Index = 5;
48
49 // CHECK: def F6
50 // CHECK: string Name = "F6";
51 // CHECK: int Index = 6;
52
53 // CHECK: def F7
54 // CHECK: string Name = "F7";
55 // CHECK: int Index = 7;
56
57 // CHECK: def R0
58 // CHECK: string Name = "R0";
59 // CHECK: int Index = 0;
60
61 // CHECK: def R1
62 // CHECK: string Name = "R1";
63 // CHECK: int Index = 1;
64
65 // CHECK: def R2
66 // CHECK: string Name = "R2";
67 // CHECK: int Index = 2;
68
69 // CHECK: def R3
70 // CHECK: string Name = "R3";
71 // CHECK: int Index = 3;
72
73 // CHECK: def R4
74 // CHECK: string Name = "R4";
75 // CHECK: int Index = 4;
76
77 // CHECK: def R5
78 // CHECK: string Name = "R5";
79 // CHECK: int Index = 5;
80
81 // CHECK: def R6
82 // CHECK: string Name = "R6";
83 // CHECK: int Index = 6;
84
85 // CHECK: def R7
86 // CHECK: string Name = "R7";
87 // CHECK: int Index = 7;
88
89 // CHECK: def X0
90 // CHECK: def X1
91 // CHECK: def Y0
92 // CHECK: def Y1
93 // CHECK: def Y2
94 // CHECK: def Y3