3 from bigint_presentation_code
.compiler_ir2
import (GPR_SIZE_IN_BYTES
, Fn
,
8 class TestCompilerIR(unittest
.TestCase
):
11 def make_add_fn(self
):
12 # type: () -> tuple[Fn, SSAVal]
14 op0
= fn
.append_new_op(OpKind
.FuncArgR3
, name
="arg")
17 op1
= fn
.append_new_op(OpKind
.SetVLI
, immediates
=[MAXVL
], name
="vl")
19 op2
= fn
.append_new_op(
20 OpKind
.SvLd
, inputs
=[arg
, vl
], immediates
=[0], maxvl
=MAXVL
,
23 op3
= fn
.append_new_op(
24 OpKind
.SvLI
, inputs
=[vl
], immediates
=[0], maxvl
=MAXVL
, name
="li")
26 op4
= fn
.append_new_op(OpKind
.SetCA
, name
="ca")
28 op5
= fn
.append_new_op(
29 OpKind
.SvAddE
, inputs
=[a
, b
, ca
, vl
], maxvl
=MAXVL
, name
="add")
32 OpKind
.SvStd
, inputs
=[s
, arg
, vl
], immediates
=[0], maxvl
=MAXVL
,
37 fn
, _arg
= self
.make_add_fn()
38 self
.assertEqual([repr(i
) for i
in fn
.ops
], [
39 "Op(kind=OpKind.FuncArgR3, "
42 "outputs=(<arg#0: <I64>>,), name='arg')",
43 "Op(kind=OpKind.SetVLI, "
46 "outputs=(<vl#0: <VL_MAXVL>>,), name='vl')",
47 "Op(kind=OpKind.SvLd, "
48 "inputs=[<arg#0: <I64>>, <vl#0: <VL_MAXVL>>], "
50 "outputs=(<ld#0: <I64*32>>,), name='ld')",
51 "Op(kind=OpKind.SvLI, "
52 "inputs=[<vl#0: <VL_MAXVL>>], "
54 "outputs=(<li#0: <I64*32>>,), name='li')",
55 "Op(kind=OpKind.SetCA, "
58 "outputs=(<ca#0: <CA>>,), name='ca')",
59 "Op(kind=OpKind.SvAddE, "
60 "inputs=[<ld#0: <I64*32>>, <li#0: <I64*32>>, <ca#0: <CA>>, <vl#0: <VL_MAXVL>>], "
62 "outputs=(<add#0: <I64*32>>, <add#1: <CA>>), name='add')",
63 "Op(kind=OpKind.SvStd, "
64 "inputs=[<add#0: <I64*32>>, <arg#0: <I64>>, <vl#0: <VL_MAXVL>>], "
66 "outputs=(), name='st')",
70 fn
, arg
= self
.make_add_fn()
72 state
= PreRASimState(ssa_vals
={arg
: (addr
,)}, memory
={})
73 state
.store(addr
=addr
, value
=0xffffffff_ffffffff,
74 size_in_bytes
=GPR_SIZE_IN_BYTES
)
75 state
.store(addr
=addr
+ GPR_SIZE_IN_BYTES
, value
=0xabcdef01_23456789,
76 size_in_bytes
=GPR_SIZE_IN_BYTES
)
79 "PreRASimState(ssa_vals={<arg#0: <I64>>: (0x100,)}, memory={\n"
80 "0x00100: <0xffffffffffffffff>,\n"
81 "0x00108: <0xabcdef0123456789>})")
85 "PreRASimState(ssa_vals={\n"
86 "<arg#0: <I64>>: (0x100,),\n"
87 "<vl#0: <VL_MAXVL>>: (0x20,),\n"
88 "<ld#0: <I64*32>>: (\n"
89 " 0xffffffffffffffff, 0xabcdef0123456789, 0x0, 0x0,\n"
90 " 0x0, 0x0, 0x0, 0x0,\n"
91 " 0x0, 0x0, 0x0, 0x0,\n"
92 " 0x0, 0x0, 0x0, 0x0,\n"
93 " 0x0, 0x0, 0x0, 0x0,\n"
94 " 0x0, 0x0, 0x0, 0x0,\n"
95 " 0x0, 0x0, 0x0, 0x0,\n"
96 " 0x0, 0x0, 0x0, 0x0),\n"
97 "<li#0: <I64*32>>: (\n"
98 " 0x0, 0x0, 0x0, 0x0,\n"
99 " 0x0, 0x0, 0x0, 0x0,\n"
100 " 0x0, 0x0, 0x0, 0x0,\n"
101 " 0x0, 0x0, 0x0, 0x0,\n"
102 " 0x0, 0x0, 0x0, 0x0,\n"
103 " 0x0, 0x0, 0x0, 0x0,\n"
104 " 0x0, 0x0, 0x0, 0x0,\n"
105 " 0x0, 0x0, 0x0, 0x0),\n"
106 "<ca#0: <CA>>: (0x1,),\n"
107 "<add#0: <I64*32>>: (\n"
108 " 0x0, 0xabcdef012345678a, 0x0, 0x0,\n"
109 " 0x0, 0x0, 0x0, 0x0,\n"
110 " 0x0, 0x0, 0x0, 0x0,\n"
111 " 0x0, 0x0, 0x0, 0x0,\n"
112 " 0x0, 0x0, 0x0, 0x0,\n"
113 " 0x0, 0x0, 0x0, 0x0,\n"
114 " 0x0, 0x0, 0x0, 0x0,\n"
115 " 0x0, 0x0, 0x0, 0x0),\n"
116 "<add#1: <CA>>: (0x0,),\n"
118 "0x00100: <0x0000000000000000>,\n"
119 "0x00108: <0xabcdef012345678a>,\n"
120 "0x00110: <0x0000000000000000>,\n"
121 "0x00118: <0x0000000000000000>,\n"
122 "0x00120: <0x0000000000000000>,\n"
123 "0x00128: <0x0000000000000000>,\n"
124 "0x00130: <0x0000000000000000>,\n"
125 "0x00138: <0x0000000000000000>,\n"
126 "0x00140: <0x0000000000000000>,\n"
127 "0x00148: <0x0000000000000000>,\n"
128 "0x00150: <0x0000000000000000>,\n"
129 "0x00158: <0x0000000000000000>,\n"
130 "0x00160: <0x0000000000000000>,\n"
131 "0x00168: <0x0000000000000000>,\n"
132 "0x00170: <0x0000000000000000>,\n"
133 "0x00178: <0x0000000000000000>,\n"
134 "0x00180: <0x0000000000000000>,\n"
135 "0x00188: <0x0000000000000000>,\n"
136 "0x00190: <0x0000000000000000>,\n"
137 "0x00198: <0x0000000000000000>,\n"
138 "0x001a0: <0x0000000000000000>,\n"
139 "0x001a8: <0x0000000000000000>,\n"
140 "0x001b0: <0x0000000000000000>,\n"
141 "0x001b8: <0x0000000000000000>,\n"
142 "0x001c0: <0x0000000000000000>,\n"
143 "0x001c8: <0x0000000000000000>,\n"
144 "0x001d0: <0x0000000000000000>,\n"
145 "0x001d8: <0x0000000000000000>,\n"
146 "0x001e0: <0x0000000000000000>,\n"
147 "0x001e8: <0x0000000000000000>,\n"
148 "0x001f0: <0x0000000000000000>,\n"
149 "0x001f8: <0x0000000000000000>})")
152 if __name__
== "__main__":