7db07962728a650567953de9ba4ff02d38e55d12
5 from bigint_presentation_code
.compiler_ir
import (Fn
, GenAsmState
, OpKind
,
7 from bigint_presentation_code
.register_allocator
import allocate_registers
8 from nmutil
.get_test_path
import get_test_path
11 def dump_graphs(test_case
, graphs
):
12 # type: (unittest.TestCase, dict[str, str]) -> None
13 base_path
= get_test_path(test_case
, "dumped_graphs")
14 shutil
.rmtree(base_path
, ignore_errors
=True)
15 base_path
.mkdir(parents
=True, exist_ok
=True)
16 for name
, dot
in graphs
.items():
17 path
= base_path
/ name
18 dot_path
= path
.with_suffix(".dot")
19 dot_path
.write_text(dot
)
22 class TestRegisterAllocator(unittest
.TestCase
):
25 def make_add_fn(self
):
26 # type: () -> tuple[Fn, SSAVal]
28 op0
= fn
.append_new_op(OpKind
.FuncArgR3
, name
="arg")
31 op1
= fn
.append_new_op(OpKind
.SetVLI
, immediates
=[MAXVL
], name
="vl")
33 op2
= fn
.append_new_op(
34 OpKind
.SvLd
, input_vals
=[arg
, vl
], immediates
=[0], maxvl
=MAXVL
,
37 op3
= fn
.append_new_op(OpKind
.SvLI
, input_vals
=[vl
], immediates
=[0],
38 maxvl
=MAXVL
, name
="li")
40 op4
= fn
.append_new_op(OpKind
.SetCA
, name
="ca")
42 op5
= fn
.append_new_op(
43 OpKind
.SvAddE
, input_vals
=[a
, b
, ca
, vl
], maxvl
=MAXVL
, name
="add")
45 _
= fn
.append_new_op(OpKind
.SvStd
, input_vals
=[s
, arg
, vl
],
46 immediates
=[0], maxvl
=MAXVL
, name
="st")
49 def test_register_allocate(self
):
50 fn
, _arg
= self
.make_add_fn()
51 reg_assignments
= allocate_registers(fn
)
54 repr(reg_assignments
),
55 "{<add.outputs[0]: <I64*32>>: "
56 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
57 "<add.inp1.copy.outputs[0]: <I64*32>>: "
58 "Loc(kind=LocKind.GPR, start=46, reg_len=32), "
59 "<add.inp0.copy.outputs[0]: <I64*32>>: "
60 "Loc(kind=LocKind.GPR, start=78, reg_len=32), "
61 "<st.inp2.setvl.outputs[0]: <VL_MAXVL>>: "
62 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
63 "<st.inp1.copy.outputs[0]: <I64>>: "
64 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
65 "<st.inp0.copy.outputs[0]: <I64*32>>: "
66 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
67 "<st.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
68 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
69 "<add.out0.copy.outputs[0]: <I64*32>>: "
70 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
71 "<add.out0.setvl.outputs[0]: <VL_MAXVL>>: "
72 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
73 "<ca.outputs[0]: <CA>>: "
74 "Loc(kind=LocKind.CA, start=0, reg_len=1), "
75 "<add.outputs[1]: <CA>>: "
76 "Loc(kind=LocKind.CA, start=0, reg_len=1), "
77 "<add.inp3.setvl.outputs[0]: <VL_MAXVL>>: "
78 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
79 "<add.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
80 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
81 "<add.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
82 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
83 "<li.out0.copy.outputs[0]: <I64*32>>: "
84 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
85 "<li.out0.setvl.outputs[0]: <VL_MAXVL>>: "
86 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
87 "<li.outputs[0]: <I64*32>>: "
88 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
89 "<li.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
90 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
91 "<ld.out0.copy.outputs[0]: <I64*32>>: "
92 "Loc(kind=LocKind.GPR, start=46, reg_len=32), "
93 "<ld.out0.setvl.outputs[0]: <VL_MAXVL>>: "
94 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
95 "<ld.outputs[0]: <I64*32>>: "
96 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
97 "<ld.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
98 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
99 "<ld.inp0.copy.outputs[0]: <I64>>: "
100 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
101 "<vl.outputs[0]: <VL_MAXVL>>: "
102 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
103 "<arg.out0.copy.outputs[0]: <I64>>: "
104 "Loc(kind=LocKind.GPR, start=4, reg_len=1), "
105 "<arg.outputs[0]: <I64>>: "
106 "Loc(kind=LocKind.GPR, start=3, reg_len=1)}"
109 def test_gen_asm(self
):
110 fn
, _arg
= self
.make_add_fn()
111 reg_assignments
= allocate_registers(fn
)
114 repr(reg_assignments
),
115 "{<add.outputs[0]: <I64*32>>: "
116 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
117 "<add.inp1.copy.outputs[0]: <I64*32>>: "
118 "Loc(kind=LocKind.GPR, start=46, reg_len=32), "
119 "<add.inp0.copy.outputs[0]: <I64*32>>: "
120 "Loc(kind=LocKind.GPR, start=78, reg_len=32), "
121 "<st.inp2.setvl.outputs[0]: <VL_MAXVL>>: "
122 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
123 "<st.inp1.copy.outputs[0]: <I64>>: "
124 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
125 "<st.inp0.copy.outputs[0]: <I64*32>>: "
126 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
127 "<st.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
128 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
129 "<add.out0.copy.outputs[0]: <I64*32>>: "
130 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
131 "<add.out0.setvl.outputs[0]: <VL_MAXVL>>: "
132 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
133 "<ca.outputs[0]: <CA>>: "
134 "Loc(kind=LocKind.CA, start=0, reg_len=1), "
135 "<add.outputs[1]: <CA>>: "
136 "Loc(kind=LocKind.CA, start=0, reg_len=1), "
137 "<add.inp3.setvl.outputs[0]: <VL_MAXVL>>: "
138 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
139 "<add.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
140 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
141 "<add.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
142 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
143 "<li.out0.copy.outputs[0]: <I64*32>>: "
144 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
145 "<li.out0.setvl.outputs[0]: <VL_MAXVL>>: "
146 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
147 "<li.outputs[0]: <I64*32>>: "
148 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
149 "<li.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
150 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
151 "<ld.out0.copy.outputs[0]: <I64*32>>: "
152 "Loc(kind=LocKind.GPR, start=46, reg_len=32), "
153 "<ld.out0.setvl.outputs[0]: <VL_MAXVL>>: "
154 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
155 "<ld.outputs[0]: <I64*32>>: "
156 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
157 "<ld.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
158 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
159 "<ld.inp0.copy.outputs[0]: <I64>>: "
160 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
161 "<vl.outputs[0]: <VL_MAXVL>>: "
162 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
163 "<arg.out0.copy.outputs[0]: <I64>>: "
164 "Loc(kind=LocKind.GPR, start=4, reg_len=1), "
165 "<arg.outputs[0]: <I64>>: "
166 "Loc(kind=LocKind.GPR, start=3, reg_len=1)}"
168 state
= GenAsmState(reg_assignments
)
170 self
.assertEqual(state
.output
, [
172 'setvl 0, 0, 32, 0, 1, 1',
174 'setvl 0, 0, 32, 0, 1, 1',
176 'setvl 0, 0, 32, 0, 1, 1',
177 'sv.or *46, *14, *14',
178 'setvl 0, 0, 32, 0, 1, 1',
180 'setvl 0, 0, 32, 0, 1, 1',
182 'setvl 0, 0, 32, 0, 1, 1',
183 'sv.or *78, *46, *46',
184 'setvl 0, 0, 32, 0, 1, 1',
185 'sv.or *46, *14, *14',
186 'setvl 0, 0, 32, 0, 1, 1',
187 'sv.adde *14, *78, *46',
188 'setvl 0, 0, 32, 0, 1, 1',
189 'setvl 0, 0, 32, 0, 1, 1',
191 'setvl 0, 0, 32, 0, 1, 1',
195 def test_register_allocate_graphs(self
):
196 fn
, _arg
= self
.make_add_fn()
197 graphs
= {} # type: dict[str, str]
199 def dump_graph(name
, dot
):
200 # type: (str, str) -> None
201 self
.assertNotIn(name
, graphs
, "duplicate graph name")
203 allocated
= allocate_registers(fn
, dump_graph
=dump_graph
)
207 "<add.outputs[0]: <I64*32>>: "
208 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
209 "<add.inp1.copy.outputs[0]: <I64*32>>: "
210 "Loc(kind=LocKind.GPR, start=46, reg_len=32), "
211 "<add.inp0.copy.outputs[0]: <I64*32>>: "
212 "Loc(kind=LocKind.GPR, start=78, reg_len=32), "
213 "<st.inp2.setvl.outputs[0]: <VL_MAXVL>>: "
214 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
215 "<st.inp1.copy.outputs[0]: <I64>>: "
216 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
217 "<st.inp0.copy.outputs[0]: <I64*32>>: "
218 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
219 "<st.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
220 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
221 "<add.out0.copy.outputs[0]: <I64*32>>: "
222 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
223 "<add.out0.setvl.outputs[0]: <VL_MAXVL>>: "
224 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
225 "<ca.outputs[0]: <CA>>: "
226 "Loc(kind=LocKind.CA, start=0, reg_len=1), "
227 "<add.outputs[1]: <CA>>: "
228 "Loc(kind=LocKind.CA, start=0, reg_len=1), "
229 "<add.inp3.setvl.outputs[0]: <VL_MAXVL>>: "
230 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
231 "<add.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
232 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
233 "<add.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
234 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
235 "<li.out0.copy.outputs[0]: <I64*32>>: "
236 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
237 "<li.out0.setvl.outputs[0]: <VL_MAXVL>>: "
238 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
239 "<li.outputs[0]: <I64*32>>: "
240 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
241 "<li.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
242 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
243 "<ld.out0.copy.outputs[0]: <I64*32>>: "
244 "Loc(kind=LocKind.GPR, start=46, reg_len=32), "
245 "<ld.out0.setvl.outputs[0]: <VL_MAXVL>>: "
246 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
247 "<ld.outputs[0]: <I64*32>>: "
248 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
249 "<ld.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
250 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
251 "<ld.inp0.copy.outputs[0]: <I64>>: "
252 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
253 "<vl.outputs[0]: <VL_MAXVL>>: "
254 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
255 "<arg.out0.copy.outputs[0]: <I64>>: "
256 "Loc(kind=LocKind.GPR, start=4, reg_len=1), "
257 "<arg.outputs[0]: <I64>>: "
258 "Loc(kind=LocKind.GPR, start=3, reg_len=1)"
261 dump_graphs(self
, graphs
)
262 # FIXME: is_copy_related is not correct, it's missing a bunch of
263 # edges (which aren't interference edges)
264 self
.assertEqual(graphs
, {
267 ' "0" [label = "<arg.outputs[0]: <I64>>: 0"]\n'
268 ' "1" [label = "<arg.out0.copy.outputs[0]: <I64>>: 0"]\n'
269 ' "2" [label = "<vl.outputs[0]: <VL_MAXVL>>: 0"]\n'
270 ' "3" [label = "<ld.inp0.copy.outputs[0]: <I64>>: 0"]\n'
271 ' "4" [label = "<ld.inp1.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
272 ' "5" [label = "<ld.outputs[0]: <I64*32>>: 0"]\n'
273 ' "6" [label = "<ld.out0.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
274 ' "7" [label = "<ld.out0.copy.outputs[0]: <I64*32>>: 0"]\n'
275 ' "8" [label = "<li.inp0.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
276 ' "9" [label = "<li.outputs[0]: <I64*32>>: 0"]\n'
277 ' "10" [label = "<li.out0.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
278 ' "11" [label = "<li.out0.copy.outputs[0]: <I64*32>>: 0"]\n'
279 ' "12" [label = "<add.inp0.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
280 ' "13" [label = "<add.inp0.copy.outputs[0]: <I64*32>>: 0"]\n'
281 ' "14" [label = "<add.inp1.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
282 ' "15" [label = "<add.inp1.copy.outputs[0]: <I64*32>>: 0"]\n'
283 ' "16" [label = "<add.inp3.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
284 ' "17" [label = "<add.outputs[0]: <I64*32>>: 0"]\n'
285 ' "18" [label = "<ca.outputs[0]: <CA>>: 0\\n'
286 '<add.outputs[1]: <CA>>: 0"]\n'
287 ' "19" [label = "<add.out0.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
288 ' "20" [label = "<add.out0.copy.outputs[0]: <I64*32>>: 0"]\n'
289 ' "21" [label = "<st.inp0.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
290 ' "22" [label = "<st.inp0.copy.outputs[0]: <I64*32>>: 0"]\n'
291 ' "23" [label = "<st.inp1.copy.outputs[0]: <I64>>: 0"]\n'
292 ' "24" [label = "<st.inp2.setvl.outputs[0]: <VL_MAXVL>>: 0"]\n'
293 ' "1" -- "3" [label = "IGEdge(is_copy_related=True)"]\n'
294 ' "1" -- "5" [label = "IGEdge(is_copy_related=False)"]\n'
295 ' "1" -- "7" [label = "IGEdge(is_copy_related=False)"]\n'
296 ' "1" -- "9" [label = "IGEdge(is_copy_related=False)"]\n'
297 ' "1" -- "11" [label = "IGEdge(is_copy_related=False)"]\n'
298 ' "1" -- "13" [label = "IGEdge(is_copy_related=False)"]\n'
299 ' "1" -- "15" [label = "IGEdge(is_copy_related=False)"]\n'
300 ' "1" -- "17" [label = "IGEdge(is_copy_related=False)"]\n'
301 ' "1" -- "20" [label = "IGEdge(is_copy_related=False)"]\n'
302 ' "1" -- "22" [label = "IGEdge(is_copy_related=False)"]\n'
303 ' "3" -- "5" [label = "IGEdge(is_copy_related=False)"]\n'
304 ' "7" -- "9" [label = "IGEdge(is_copy_related=False)"]\n'
305 ' "7" -- "11" [label = "IGEdge(is_copy_related=False)"]\n'
306 ' "11" -- "13" [label = "IGEdge(is_copy_related=False)"]\n'
307 ' "13" -- "15" [label = "IGEdge(is_copy_related=False)"]\n'
308 ' "13" -- "17" [label = "IGEdge(is_copy_related=False)"]\n'
309 ' "15" -- "17" [label = "IGEdge(is_copy_related=False)"]\n'
310 ' "22" -- "23" [label = "IGEdge(is_copy_related=False)"]\n'
314 def test_register_allocate_spread(self
):
317 vl
= fn
.append_new_op(OpKind
.SetVLI
, immediates
=[maxvl
],
318 name
="vl", maxvl
=maxvl
).outputs
[0]
319 li
= fn
.append_new_op(OpKind
.SvLI
, input_vals
=[vl
], immediates
=[0],
320 name
="li", maxvl
=maxvl
).outputs
[0]
321 spread
= fn
.append_new_op(OpKind
.Spread
, input_vals
=[li
, vl
],
322 name
="spread", maxvl
=maxvl
).outputs
323 _concat
= fn
.append_new_op(
324 OpKind
.Concat
, input_vals
=[*spread
[::-1], vl
],
325 name
="concat", maxvl
=maxvl
)
326 reg_assignments
= allocate_registers(fn
, debug_out
=sys
.stdout
)
329 repr(reg_assignments
),
330 "{<concat.out0.copy.outputs[0]: <I64*32>>: "
331 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
332 "<concat.out0.setvl.outputs[0]: <VL_MAXVL>>: "
333 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
334 "<concat.outputs[0]: <I64*32>>: "
335 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
336 "<concat.inp0.copy.outputs[0]: <I64>>: "
337 "Loc(kind=LocKind.GPR, start=14, reg_len=1), "
338 "<concat.inp1.copy.outputs[0]: <I64>>: "
339 "Loc(kind=LocKind.GPR, start=15, reg_len=1), "
340 "<concat.inp2.copy.outputs[0]: <I64>>: "
341 "Loc(kind=LocKind.GPR, start=16, reg_len=1), "
342 "<concat.inp3.copy.outputs[0]: <I64>>: "
343 "Loc(kind=LocKind.GPR, start=17, reg_len=1), "
344 "<concat.inp4.copy.outputs[0]: <I64>>: "
345 "Loc(kind=LocKind.GPR, start=18, reg_len=1), "
346 "<concat.inp5.copy.outputs[0]: <I64>>: "
347 "Loc(kind=LocKind.GPR, start=19, reg_len=1), "
348 "<concat.inp6.copy.outputs[0]: <I64>>: "
349 "Loc(kind=LocKind.GPR, start=20, reg_len=1), "
350 "<concat.inp7.copy.outputs[0]: <I64>>: "
351 "Loc(kind=LocKind.GPR, start=21, reg_len=1), "
352 "<concat.inp8.copy.outputs[0]: <I64>>: "
353 "Loc(kind=LocKind.GPR, start=22, reg_len=1), "
354 "<concat.inp9.copy.outputs[0]: <I64>>: "
355 "Loc(kind=LocKind.GPR, start=23, reg_len=1), "
356 "<concat.inp10.copy.outputs[0]: <I64>>: "
357 "Loc(kind=LocKind.GPR, start=24, reg_len=1), "
358 "<concat.inp11.copy.outputs[0]: <I64>>: "
359 "Loc(kind=LocKind.GPR, start=25, reg_len=1), "
360 "<concat.inp12.copy.outputs[0]: <I64>>: "
361 "Loc(kind=LocKind.GPR, start=26, reg_len=1), "
362 "<concat.inp13.copy.outputs[0]: <I64>>: "
363 "Loc(kind=LocKind.GPR, start=27, reg_len=1), "
364 "<concat.inp14.copy.outputs[0]: <I64>>: "
365 "Loc(kind=LocKind.GPR, start=28, reg_len=1), "
366 "<concat.inp15.copy.outputs[0]: <I64>>: "
367 "Loc(kind=LocKind.GPR, start=29, reg_len=1), "
368 "<concat.inp16.copy.outputs[0]: <I64>>: "
369 "Loc(kind=LocKind.GPR, start=30, reg_len=1), "
370 "<concat.inp17.copy.outputs[0]: <I64>>: "
371 "Loc(kind=LocKind.GPR, start=31, reg_len=1), "
372 "<concat.inp18.copy.outputs[0]: <I64>>: "
373 "Loc(kind=LocKind.GPR, start=32, reg_len=1), "
374 "<concat.inp19.copy.outputs[0]: <I64>>: "
375 "Loc(kind=LocKind.GPR, start=33, reg_len=1), "
376 "<concat.inp20.copy.outputs[0]: <I64>>: "
377 "Loc(kind=LocKind.GPR, start=34, reg_len=1), "
378 "<concat.inp21.copy.outputs[0]: <I64>>: "
379 "Loc(kind=LocKind.GPR, start=35, reg_len=1), "
380 "<concat.inp22.copy.outputs[0]: <I64>>: "
381 "Loc(kind=LocKind.GPR, start=36, reg_len=1), "
382 "<concat.inp23.copy.outputs[0]: <I64>>: "
383 "Loc(kind=LocKind.GPR, start=37, reg_len=1), "
384 "<concat.inp24.copy.outputs[0]: <I64>>: "
385 "Loc(kind=LocKind.GPR, start=38, reg_len=1), "
386 "<concat.inp25.copy.outputs[0]: <I64>>: "
387 "Loc(kind=LocKind.GPR, start=39, reg_len=1), "
388 "<concat.inp26.copy.outputs[0]: <I64>>: "
389 "Loc(kind=LocKind.GPR, start=40, reg_len=1), "
390 "<concat.inp27.copy.outputs[0]: <I64>>: "
391 "Loc(kind=LocKind.GPR, start=41, reg_len=1), "
392 "<concat.inp28.copy.outputs[0]: <I64>>: "
393 "Loc(kind=LocKind.GPR, start=42, reg_len=1), "
394 "<concat.inp29.copy.outputs[0]: <I64>>: "
395 "Loc(kind=LocKind.GPR, start=43, reg_len=1), "
396 "<concat.inp30.copy.outputs[0]: <I64>>: "
397 "Loc(kind=LocKind.GPR, start=44, reg_len=1), "
398 "<concat.inp31.copy.outputs[0]: <I64>>: "
399 "Loc(kind=LocKind.GPR, start=45, reg_len=1), "
400 "<concat.inp32.setvl.outputs[0]: <VL_MAXVL>>: "
401 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
402 "<spread.out31.copy.outputs[0]: <I64>>: "
403 "Loc(kind=LocKind.GPR, start=3, reg_len=1), "
404 "<spread.out30.copy.outputs[0]: <I64>>: "
405 "Loc(kind=LocKind.GPR, start=4, reg_len=1), "
406 "<spread.out29.copy.outputs[0]: <I64>>: "
407 "Loc(kind=LocKind.GPR, start=5, reg_len=1), "
408 "<spread.outputs[0]: <I64>>: "
409 "Loc(kind=LocKind.GPR, start=14, reg_len=1), "
410 "<spread.outputs[1]: <I64>>: "
411 "Loc(kind=LocKind.GPR, start=15, reg_len=1), "
412 "<spread.outputs[2]: <I64>>: "
413 "Loc(kind=LocKind.GPR, start=16, reg_len=1), "
414 "<spread.outputs[3]: <I64>>: "
415 "Loc(kind=LocKind.GPR, start=17, reg_len=1), "
416 "<spread.outputs[4]: <I64>>: "
417 "Loc(kind=LocKind.GPR, start=18, reg_len=1), "
418 "<spread.outputs[5]: <I64>>: "
419 "Loc(kind=LocKind.GPR, start=19, reg_len=1), "
420 "<spread.outputs[6]: <I64>>: "
421 "Loc(kind=LocKind.GPR, start=20, reg_len=1), "
422 "<spread.outputs[7]: <I64>>: "
423 "Loc(kind=LocKind.GPR, start=21, reg_len=1), "
424 "<spread.outputs[8]: <I64>>: "
425 "Loc(kind=LocKind.GPR, start=22, reg_len=1), "
426 "<spread.outputs[9]: <I64>>: "
427 "Loc(kind=LocKind.GPR, start=23, reg_len=1), "
428 "<spread.outputs[10]: <I64>>: "
429 "Loc(kind=LocKind.GPR, start=24, reg_len=1), "
430 "<spread.outputs[11]: <I64>>: "
431 "Loc(kind=LocKind.GPR, start=25, reg_len=1), "
432 "<spread.outputs[12]: <I64>>: "
433 "Loc(kind=LocKind.GPR, start=26, reg_len=1), "
434 "<spread.outputs[13]: <I64>>: "
435 "Loc(kind=LocKind.GPR, start=27, reg_len=1), "
436 "<spread.outputs[14]: <I64>>: "
437 "Loc(kind=LocKind.GPR, start=28, reg_len=1), "
438 "<spread.outputs[15]: <I64>>: "
439 "Loc(kind=LocKind.GPR, start=29, reg_len=1), "
440 "<spread.outputs[16]: <I64>>: "
441 "Loc(kind=LocKind.GPR, start=30, reg_len=1), "
442 "<spread.outputs[17]: <I64>>: "
443 "Loc(kind=LocKind.GPR, start=31, reg_len=1), "
444 "<spread.outputs[18]: <I64>>: "
445 "Loc(kind=LocKind.GPR, start=32, reg_len=1), "
446 "<spread.outputs[19]: <I64>>: "
447 "Loc(kind=LocKind.GPR, start=33, reg_len=1), "
448 "<spread.outputs[20]: <I64>>: "
449 "Loc(kind=LocKind.GPR, start=34, reg_len=1), "
450 "<spread.outputs[21]: <I64>>: "
451 "Loc(kind=LocKind.GPR, start=35, reg_len=1), "
452 "<spread.outputs[22]: <I64>>: "
453 "Loc(kind=LocKind.GPR, start=36, reg_len=1), "
454 "<spread.outputs[23]: <I64>>: "
455 "Loc(kind=LocKind.GPR, start=37, reg_len=1), "
456 "<spread.outputs[24]: <I64>>: "
457 "Loc(kind=LocKind.GPR, start=38, reg_len=1), "
458 "<spread.outputs[25]: <I64>>: "
459 "Loc(kind=LocKind.GPR, start=39, reg_len=1), "
460 "<spread.outputs[26]: <I64>>: "
461 "Loc(kind=LocKind.GPR, start=40, reg_len=1), "
462 "<spread.outputs[27]: <I64>>: "
463 "Loc(kind=LocKind.GPR, start=41, reg_len=1), "
464 "<spread.outputs[28]: <I64>>: "
465 "Loc(kind=LocKind.GPR, start=42, reg_len=1), "
466 "<spread.outputs[29]: <I64>>: "
467 "Loc(kind=LocKind.GPR, start=43, reg_len=1), "
468 "<spread.outputs[30]: <I64>>: "
469 "Loc(kind=LocKind.GPR, start=44, reg_len=1), "
470 "<spread.outputs[31]: <I64>>: "
471 "Loc(kind=LocKind.GPR, start=45, reg_len=1), "
472 "<spread.out28.copy.outputs[0]: <I64>>: "
473 "Loc(kind=LocKind.GPR, start=6, reg_len=1), "
474 "<spread.out27.copy.outputs[0]: <I64>>: "
475 "Loc(kind=LocKind.GPR, start=7, reg_len=1), "
476 "<spread.out26.copy.outputs[0]: <I64>>: "
477 "Loc(kind=LocKind.GPR, start=8, reg_len=1), "
478 "<spread.out25.copy.outputs[0]: <I64>>: "
479 "Loc(kind=LocKind.GPR, start=9, reg_len=1), "
480 "<spread.out24.copy.outputs[0]: <I64>>: "
481 "Loc(kind=LocKind.GPR, start=10, reg_len=1), "
482 "<spread.out23.copy.outputs[0]: <I64>>: "
483 "Loc(kind=LocKind.GPR, start=11, reg_len=1), "
484 "<spread.out22.copy.outputs[0]: <I64>>: "
485 "Loc(kind=LocKind.GPR, start=12, reg_len=1), "
486 "<spread.out21.copy.outputs[0]: <I64>>: "
487 "Loc(kind=LocKind.GPR, start=46, reg_len=1), "
488 "<spread.out20.copy.outputs[0]: <I64>>: "
489 "Loc(kind=LocKind.GPR, start=47, reg_len=1), "
490 "<spread.out19.copy.outputs[0]: <I64>>: "
491 "Loc(kind=LocKind.GPR, start=48, reg_len=1), "
492 "<spread.out18.copy.outputs[0]: <I64>>: "
493 "Loc(kind=LocKind.GPR, start=49, reg_len=1), "
494 "<spread.out17.copy.outputs[0]: <I64>>: "
495 "Loc(kind=LocKind.GPR, start=50, reg_len=1), "
496 "<spread.out16.copy.outputs[0]: <I64>>: "
497 "Loc(kind=LocKind.GPR, start=51, reg_len=1), "
498 "<spread.out15.copy.outputs[0]: <I64>>: "
499 "Loc(kind=LocKind.GPR, start=52, reg_len=1), "
500 "<spread.out14.copy.outputs[0]: <I64>>: "
501 "Loc(kind=LocKind.GPR, start=53, reg_len=1), "
502 "<spread.out13.copy.outputs[0]: <I64>>: "
503 "Loc(kind=LocKind.GPR, start=54, reg_len=1), "
504 "<spread.out12.copy.outputs[0]: <I64>>: "
505 "Loc(kind=LocKind.GPR, start=55, reg_len=1), "
506 "<spread.out11.copy.outputs[0]: <I64>>: "
507 "Loc(kind=LocKind.GPR, start=56, reg_len=1), "
508 "<spread.out10.copy.outputs[0]: <I64>>: "
509 "Loc(kind=LocKind.GPR, start=57, reg_len=1), "
510 "<spread.out9.copy.outputs[0]: <I64>>: "
511 "Loc(kind=LocKind.GPR, start=58, reg_len=1), "
512 "<spread.out8.copy.outputs[0]: <I64>>: "
513 "Loc(kind=LocKind.GPR, start=59, reg_len=1), "
514 "<spread.out7.copy.outputs[0]: <I64>>: "
515 "Loc(kind=LocKind.GPR, start=60, reg_len=1), "
516 "<spread.out6.copy.outputs[0]: <I64>>: "
517 "Loc(kind=LocKind.GPR, start=61, reg_len=1), "
518 "<spread.out5.copy.outputs[0]: <I64>>: "
519 "Loc(kind=LocKind.GPR, start=62, reg_len=1), "
520 "<spread.out4.copy.outputs[0]: <I64>>: "
521 "Loc(kind=LocKind.GPR, start=63, reg_len=1), "
522 "<spread.out3.copy.outputs[0]: <I64>>: "
523 "Loc(kind=LocKind.GPR, start=64, reg_len=1), "
524 "<spread.out2.copy.outputs[0]: <I64>>: "
525 "Loc(kind=LocKind.GPR, start=65, reg_len=1), "
526 "<spread.out1.copy.outputs[0]: <I64>>: "
527 "Loc(kind=LocKind.GPR, start=66, reg_len=1), "
528 "<spread.out0.copy.outputs[0]: <I64>>: "
529 "Loc(kind=LocKind.GPR, start=67, reg_len=1), "
530 "<spread.inp1.setvl.outputs[0]: <VL_MAXVL>>: "
531 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
532 "<spread.inp0.copy.outputs[0]: <I64*32>>: "
533 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
534 "<spread.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
535 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
536 "<li.out0.copy.outputs[0]: <I64*32>>: "
537 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
538 "<li.out0.setvl.outputs[0]: <VL_MAXVL>>: "
539 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
540 "<li.outputs[0]: <I64*32>>: "
541 "Loc(kind=LocKind.GPR, start=14, reg_len=32), "
542 "<li.inp0.setvl.outputs[0]: <VL_MAXVL>>: "
543 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1), "
544 "<vl.outputs[0]: <VL_MAXVL>>: "
545 "Loc(kind=LocKind.VL_MAXVL, start=0, reg_len=1)}"
547 state
= GenAsmState(reg_assignments
)
549 self
.assertEqual(state
.output
, [
550 'setvl 0, 0, 32, 0, 1, 1',
551 'setvl 0, 0, 32, 0, 1, 1',
553 'setvl 0, 0, 32, 0, 1, 1',
554 'setvl 0, 0, 32, 0, 1, 1',
555 'setvl 0, 0, 32, 0, 1, 1',
620 'setvl 0, 0, 32, 0, 1, 1',
621 'setvl 0, 0, 32, 0, 1, 1'])
624 if __name__
== "__main__":