| // RUN: llvm-tblgen %s | FileCheck %s |
| |
| class Register<string name, int idx> { |
| string Name = name; |
| int Index = idx; |
| } |
| |
| foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in { |
| def R#i : Register<"R"#i, i>; |
| def F#i : Register<"F"#i, i>; |
| } |
| |
| def Defs { |
| list<int> a = [0, 1]; |
| list<int> b = [2, 3]; |
| } |
| |
| foreach i = Defs.a in { |
| def X#i; |
| } |
| |
| foreach i = !listconcat(Defs.a, Defs.b) in |
| def Y#i; |
| |
| // CHECK: def F0 |
| // CHECK: string Name = "F0"; |
| // CHECK: int Index = 0; |
| |
| // CHECK: def F1 |
| // CHECK: string Name = "F1"; |
| // CHECK: int Index = 1; |
| |
| // CHECK: def F2 |
| // CHECK: string Name = "F2"; |
| // CHECK: int Index = 2; |
| |
| // CHECK: def F3 |
| // CHECK: string Name = "F3"; |
| // CHECK: int Index = 3; |
| |
| // CHECK: def F4 |
| // CHECK: string Name = "F4"; |
| // CHECK: int Index = 4; |
| |
| // CHECK: def F5 |
| // CHECK: string Name = "F5"; |
| // CHECK: int Index = 5; |
| |
| // CHECK: def F6 |
| // CHECK: string Name = "F6"; |
| // CHECK: int Index = 6; |
| |
| // CHECK: def F7 |
| // CHECK: string Name = "F7"; |
| // CHECK: int Index = 7; |
| |
| // CHECK: def R0 |
| // CHECK: string Name = "R0"; |
| // CHECK: int Index = 0; |
| |
| // CHECK: def R1 |
| // CHECK: string Name = "R1"; |
| // CHECK: int Index = 1; |
| |
| // CHECK: def R2 |
| // CHECK: string Name = "R2"; |
| // CHECK: int Index = 2; |
| |
| // CHECK: def R3 |
| // CHECK: string Name = "R3"; |
| // CHECK: int Index = 3; |
| |
| // CHECK: def R4 |
| // CHECK: string Name = "R4"; |
| // CHECK: int Index = 4; |
| |
| // CHECK: def R5 |
| // CHECK: string Name = "R5"; |
| // CHECK: int Index = 5; |
| |
| // CHECK: def R6 |
| // CHECK: string Name = "R6"; |
| // CHECK: int Index = 6; |
| |
| // CHECK: def R7 |
| // CHECK: string Name = "R7"; |
| // CHECK: int Index = 7; |
| |
| // CHECK: def X0 |
| // CHECK: def X1 |
| // CHECK: def Y0 |
| // CHECK: def Y1 |
| // CHECK: def Y2 |
| // CHECK: def Y3 |