ForeachLoop.td 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // RUN: llvm-tblgen %s | FileCheck %s
  2. class Register<string name, int idx> {
  3. string Name = name;
  4. int Index = idx;
  5. }
  6. // CHECK-NOT: !strconcat
  7. foreach i = 0-3 in
  8. def Q#i : Register<"Q"#i, i>;
  9. // CHECK: def Q0
  10. // CHECK: def Q1
  11. // CHECK: def Q2
  12. // CHECK: def Q3
  13. foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in
  14. def R#i : Register<"R"#i, i>;
  15. // CHECK: def R0
  16. // CHECK: string Name = "R0";
  17. // CHECK: int Index = 0;
  18. // CHECK: def R1
  19. // CHECK: string Name = "R1";
  20. // CHECK: int Index = 1;
  21. // CHECK: def R2
  22. // CHECK: string Name = "R2";
  23. // CHECK: int Index = 2;
  24. // CHECK: def R3
  25. // CHECK: string Name = "R3";
  26. // CHECK: int Index = 3;
  27. // CHECK: def R4
  28. // CHECK: string Name = "R4";
  29. // CHECK: int Index = 4;
  30. // CHECK: def R5
  31. // CHECK: string Name = "R5";
  32. // CHECK: int Index = 5;
  33. // CHECK: def R6
  34. // CHECK: string Name = "R6";
  35. // CHECK: int Index = 6;
  36. // CHECK: def R7
  37. // CHECK: string Name = "R7";
  38. // CHECK: int Index = 7;
  39. foreach i = {0-3,9-7} in {
  40. def S#i : Register<"Q"#i, i>;
  41. def : Register<"T"#i, i>;
  42. }
  43. // CHECK: def S0
  44. // CHECK: def S1
  45. // CHECK: def S2
  46. // CHECK: def S3
  47. // CHECK: def S7
  48. // CHECK: def S8
  49. // CHECK: def S9
  50. // CHECK: def
  51. // CHECK: string Name = "T0";
  52. // CHECK: def
  53. // CHECK: string Name = "T1";
  54. // CHECK: def
  55. // CHECK: string Name = "T2";
  56. // CHECK: def
  57. // CHECK: string Name = "T3";
  58. // CHECK: def
  59. // CHECK: string Name = "T9";
  60. // CHECK: def
  61. // CHECK: string Name = "T8";
  62. // CHECK: def
  63. // CHECK: string Name = "T7";