• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1include "llvm/Target/Target.td"
2
3def TestTargetInstrInfo : InstrInfo;
4
5def TestTarget : Target {
6  let InstructionSet = TestTargetInstrInfo;
7}
8
9class Indexes<int N> {
10  list<int> all = [0,   1,  2,  3,  4,  5,  6 , 7,
11                   8,   9, 10, 11, 12, 13, 14, 15,
12                   16, 17, 18, 19, 20, 21, 22, 23,
13                   24, 25, 26, 27, 28, 29, 30, 31];
14  list<int> slice =
15    !foldl([]<int>, all, acc, cur,
16           !listconcat(acc, !if(!lt(cur, N), [cur], [])));
17}
18
19#ifdef USE_NAMESPACE
20  let Namespace = "TestNamespace" in {
21#endif
22foreach Index = 0...31 in {
23  def sub#Index : SubRegIndex<32, !shl(Index, 5)>;
24}
25
26foreach Size = {2,4,8,16} in {
27  foreach Index = Indexes<!add(33, !mul(Size, -1))>.slice in {
28    def !foldl("", Indexes<Size>.slice, acc, cur,
29               !strconcat(acc#!if(!eq(acc,""),"","_"), "sub"#!add(cur, Index))) :
30      SubRegIndex<!mul(Size, 32), !shl(Index, 5)> {
31      let CoveringSubRegIndices =
32        !foldl([]<SubRegIndex>, Indexes<Size>.slice, acc, cur,
33               !listconcat(acc, [!cast<SubRegIndex>(sub#!add(cur, Index))]));
34    }
35  }
36}
37
38foreach Index = 0...255 in {
39  def R#Index : Register <"r"#Index>;
40}
41#ifdef USE_NAMESPACE
42}
43#endif
44
45def GPR32 : RegisterClass<"TestTarget", [i32], 32,
46                          (add (sequence "R%u", 0, 255))>;
47
48def GPR64 : RegisterTuples<[sub0, sub1],
49                           [(decimate (shl GPR32, 0), 1),
50                            (decimate (shl GPR32, 1), 1)
51                           ]>;
52
53def GPR128 : RegisterTuples<[sub0, sub1, sub2, sub3],
54                            [
55                             (decimate (shl GPR32, 0), 1),
56                             (decimate (shl GPR32, 1), 1),
57                             (decimate (shl GPR32, 2), 1),
58                             (decimate (shl GPR32, 3), 1)
59                            ]>;
60
61def GPR256 : RegisterTuples<[sub0, sub1, sub2, sub3, sub4, sub5, sub6, sub7],
62                             [
63                              (decimate (shl GPR32, 0), 1),
64                              (decimate (shl GPR32, 1), 1),
65                              (decimate (shl GPR32, 2), 1),
66                              (decimate (shl GPR32, 3), 1),
67                              (decimate (shl GPR32, 4), 1),
68                              (decimate (shl GPR32, 5), 1),
69                              (decimate (shl GPR32, 6), 1),
70                              (decimate (shl GPR32, 7), 1)
71                             ]>;
72
73def GPR512 : RegisterTuples<[sub0, sub1, sub2, sub3, sub4, sub5, sub6, sub7,
74                             sub8, sub9, sub10, sub11, sub12, sub13, sub14, sub15],
75                             [
76                              (decimate (shl GPR32, 0), 1),
77                              (decimate (shl GPR32, 1), 1),
78                              (decimate (shl GPR32, 2), 1),
79                              (decimate (shl GPR32, 3), 1),
80                              (decimate (shl GPR32, 4), 1),
81                              (decimate (shl GPR32, 5), 1),
82                              (decimate (shl GPR32, 6), 1),
83                              (decimate (shl GPR32, 7), 1),
84                              (decimate (shl GPR32, 8), 1),
85                              (decimate (shl GPR32, 9), 1),
86                              (decimate (shl GPR32, 10), 1),
87                              (decimate (shl GPR32, 11), 1),
88                              (decimate (shl GPR32, 12), 1),
89                              (decimate (shl GPR32, 13), 1),
90                              (decimate (shl GPR32, 14), 1),
91                              (decimate (shl GPR32, 15), 1)
92                             ]>;
93
94def GPR1024 : RegisterTuples<[sub0, sub1, sub2, sub3, sub4, sub5, sub6, sub7,
95                              sub8, sub9, sub10, sub11, sub12, sub13, sub14, sub15,
96                              sub16, sub17, sub18, sub19, sub20, sub21, sub22, sub23,
97                              sub24, sub25, sub26, sub27, sub28, sub29, sub30, sub31],
98                             [
99                              (decimate (shl GPR32, 0), 1),
100                              (decimate (shl GPR32, 1), 1),
101                              (decimate (shl GPR32, 2), 1),
102                              (decimate (shl GPR32, 3), 1),
103                              (decimate (shl GPR32, 4), 1),
104                              (decimate (shl GPR32, 5), 1),
105                              (decimate (shl GPR32, 6), 1),
106                              (decimate (shl GPR32, 7), 1),
107                              (decimate (shl GPR32, 8), 1),
108                              (decimate (shl GPR32, 9), 1),
109                              (decimate (shl GPR32, 10), 1),
110                              (decimate (shl GPR32, 11), 1),
111                              (decimate (shl GPR32, 12), 1),
112                              (decimate (shl GPR32, 13), 1),
113                              (decimate (shl GPR32, 14), 1),
114                              (decimate (shl GPR32, 15), 1),
115                              (decimate (shl GPR32, 16), 1),
116                              (decimate (shl GPR32, 17), 1),
117                              (decimate (shl GPR32, 18), 1),
118                              (decimate (shl GPR32, 19), 1),
119                              (decimate (shl GPR32, 20), 1),
120                              (decimate (shl GPR32, 21), 1),
121                              (decimate (shl GPR32, 22), 1),
122                              (decimate (shl GPR32, 23), 1),
123                              (decimate (shl GPR32, 24), 1),
124                              (decimate (shl GPR32, 25), 1),
125                              (decimate (shl GPR32, 26), 1),
126                              (decimate (shl GPR32, 27), 1),
127                              (decimate (shl GPR32, 28), 1),
128                              (decimate (shl GPR32, 29), 1),
129                              (decimate (shl GPR32, 30), 1),
130                              (decimate (shl GPR32, 31), 1)
131                             ]>;
132
133#ifdef USE_NAMESPACE
134  let Namespace = "TestNamespace" in {
135#endif
136def GPR_64 : RegisterClass<"", [v2i32], 64, (add GPR64)>;
137def GPR_1024 : RegisterClass<"", [v32i32], 1024, (add GPR1024)>;
138#ifdef USE_NAMESPACE
139}
140#endif
141