1 #include <OOC/SSA/ConstProp.d>
2 #include <__oo2c.h>
3 #include <setjmp.h>
4
OOC_SSA_ConstProp__ComputeConst(OOC_SSA__ProcBlock pb,OOC_SSA__Instr instr)5 static OOC_SSA__Const OOC_SSA_ConstProp__ComputeConst(OOC_SSA__ProcBlock pb, OOC_SSA__Instr instr) {
6 register OOC_INT64 i0,i1,i2,i3;
7 OOC_SSA__Const arg1;
8 OOC_SSA__Const arg2;
9 Object_Boxed__Object v;
10 Object_BigInt__BigInt _i1;
11 Object_BigInt__BigInt _i2;
12
13 i0 = (OOC_INT64)instr;
14 i1 = *(OOC_INT8*)((_check_pointer(i0, 1492))+72);
15 i1 = i1==42;
16 if (i1) goto l57;
17 i1 = OOC_SSA__InstrDesc_SizeOpndList((OOC_SSA__Instr)i0);
18 i1 = i1>=2;
19 if (i1) goto l5;
20 i1=0u;
21 goto l7;
22 l5:
23 i1 = *(OOC_INT8*)((_check_pointer(i0, 1837))+72);
24 i1 = i1!=81;
25
26 l7:
27 if (i1) goto l9;
28 i1=0u;
29 goto l11;
30 l9:
31 i1 = *(OOC_INT8*)((_check_pointer(i0, 1884))+72);
32 i1 = i1!=39;
33
34 l11:
35 if (i1) goto l13;
36 i1=0u;
37 goto l15;
38 l13:
39 i1 = *(OOC_INT8*)((_check_pointer(i0, 1925))+72);
40 i1 = i1!=40;
41
42 l15:
43 if (i1) goto l17;
44 i1=0u;
45 goto l19;
46 l17:
47 i1 = *(OOC_INT8*)((_check_pointer(i0, 1968))+72);
48 i1 = i1!=52;
49
50 l19:
51 if (i1) goto l21;
52 i1=0u;
53 goto l23;
54 l21:
55 i1 = *(OOC_INT8*)((_check_pointer(i0, 2006))+72);
56 i1 = i1!=53;
57
58 l23:
59 if (!i1) goto l65;
60 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 2120))+48);
61 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 2130));
62 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 2135))+32);
63 i1 = _type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 2146)))), &_td_OOC_SSA__ConstDesc, 2146);
64 arg1 = (OOC_SSA__Const)i1;
65 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 2173))+48);
66 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 2183))+16);
67 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i2, 2193));
68 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 2198))+32);
69 i2 = _type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 2209)))), &_td_OOC_SSA__ConstDesc, 2209);
70 arg2 = (OOC_SSA__Const)i2;
71 v = (Object_Boxed__Object)0;
72 i3 = *(OOC_INT8*)((_check_pointer(i1, 2255))+9);
73 switch (i3) {
74 case 1 ... 9:
75 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 2331))+80);
76 i3 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i3, 2338)))), &_td_Object_BigInt__BigIntDesc);
77 if (i3) goto l29;
78 i3=0u;
79 goto l31;
80 l29:
81 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 2363))+80);
82 i3 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i3, 2370)))), &_td_Object_BigInt__BigIntDesc);
83
84 l31:
85 if (i3) goto l33;
86 i1=0;
87 goto l48;
88 l33:
89 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 2489))+80);
90 i1 = _type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 2504)))), &_td_Object_BigInt__BigIntDesc, 2504);
91 _i1 = (Object_BigInt__BigInt)i1;
92 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 2533))+80);
93 i2 = _type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 2548)))), &_td_Object_BigInt__BigIntDesc, 2548);
94 _i2 = (Object_BigInt__BigInt)i2;
95 i3 = *(OOC_INT8*)((_check_pointer(i0, 2588))+72);
96 switch (i3) {
97 case 19:
98 i1 = (OOC_INT64)Object_BigInt__BigIntDesc_Add((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i2);
99 v = (Object_Boxed__Object)i1;
100
101 goto l48;
102 case 20:
103 i1 = (OOC_INT64)Object_BigInt__BigIntDesc_Sub((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i2);
104 v = (Object_Boxed__Object)i1;
105
106 goto l48;
107 case 22:
108 i1 = (OOC_INT64)Object_BigInt__BigIntDesc_Mul((Object_BigInt__BigInt)i1, (Object_BigInt__BigInt)i2);
109 v = (Object_Boxed__Object)i1;
110
111 goto l48;
112 case 25:
113 i3 = (OOC_INT64)RT0__NewObject(_td_Object_Boxed__Boolean.baseTypes[0]);
114 i1 = Object_BigInt__BigIntDesc_Cmp((Object_BigInt__BigInt)i1, (Object__Object)i2);
115 Object_Boxed__BooleanDesc_INIT((Object_Boxed__Boolean)i3, (i1==0));
116 v = (Object_Boxed__Object)i3;
117 i1=i3;
118 goto l48;
119 case 26:
120 i3 = (OOC_INT64)RT0__NewObject(_td_Object_Boxed__Boolean.baseTypes[0]);
121 i1 = Object_BigInt__BigIntDesc_Cmp((Object_BigInt__BigInt)i1, (Object__Object)i2);
122 Object_Boxed__BooleanDesc_INIT((Object_Boxed__Boolean)i3, (i1!=0));
123 v = (Object_Boxed__Object)i3;
124 i1=i3;
125 goto l48;
126 case 28:
127 i3 = (OOC_INT64)RT0__NewObject(_td_Object_Boxed__Boolean.baseTypes[0]);
128 i1 = Object_BigInt__BigIntDesc_Cmp((Object_BigInt__BigInt)i1, (Object__Object)i2);
129 Object_Boxed__BooleanDesc_INIT((Object_Boxed__Boolean)i3, (i1<=0));
130 v = (Object_Boxed__Object)i3;
131 i1=i3;
132 goto l48;
133 case 27:
134 i3 = (OOC_INT64)RT0__NewObject(_td_Object_Boxed__Boolean.baseTypes[0]);
135 i1 = Object_BigInt__BigIntDesc_Cmp((Object_BigInt__BigInt)i1, (Object__Object)i2);
136 Object_Boxed__BooleanDesc_INIT((Object_Boxed__Boolean)i3, (i1<0));
137 v = (Object_Boxed__Object)i3;
138 i1=i3;
139 goto l48;
140 case 30:
141 i3 = (OOC_INT64)RT0__NewObject(_td_Object_Boxed__Boolean.baseTypes[0]);
142 i1 = Object_BigInt__BigIntDesc_Cmp((Object_BigInt__BigInt)i1, (Object__Object)i2);
143 Object_Boxed__BooleanDesc_INIT((Object_Boxed__Boolean)i3, (i1>=0));
144 v = (Object_Boxed__Object)i3;
145 i1=i3;
146 goto l48;
147 case 29:
148 i3 = (OOC_INT64)RT0__NewObject(_td_Object_Boxed__Boolean.baseTypes[0]);
149 i1 = Object_BigInt__BigIntDesc_Cmp((Object_BigInt__BigInt)i1, (Object__Object)i2);
150 Object_Boxed__BooleanDesc_INIT((Object_Boxed__Boolean)i3, (i1>0));
151 v = (Object_Boxed__Object)i3;
152 i1=i3;
153 goto l48;
154 default:
155 i1=0;
156 goto l48;
157 }
158 /* goto: unreachable */
159 default:
160 i1=0;
161 goto l48;
162 }
163 l48:
164 i2 = i1!=0;
165 if (!i2) goto l65;
166 i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 3760)))), &_td_Object_Boxed__BooleanDesc);
167 if (i2) goto l53;
168 i0 = *(OOC_INT8*)((_check_pointer(i0, 3894))+9);
169 i2 = (OOC_INT64)pb;
170 i0 = (OOC_INT64)OOC_SSA__ProcBlockDesc_GetConst((OOC_SSA__ProcBlock)i2, (Object_Boxed__Object)i1, i0, (OOC_SymbolTable__Type)0);
171 return (OOC_SSA__Const)i0;
172 goto l65;
173 l53:
174 i0 = *(OOC_UINT8*)(_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 3825)))), &_td_Object_Boxed__BooleanDesc, 3825)), 3833));
175 i1 = (OOC_INT64)pb;
176 i0 = (OOC_INT64)OOC_SSA__ProcBlockDesc_GetConstBool((OOC_SSA__ProcBlock)i1, i0);
177 return (OOC_SSA__Const)i0;
178 goto l65;
179 l57:
180 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 1544))+48);
181 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 1554));
182 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 1559))+32);
183 i1 = _type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 1570)))), &_td_OOC_SSA__ConstDesc, 1570);
184 arg1 = (OOC_SSA__Const)i1;
185 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 1592))+80);
186 i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 1599)))), &_td_Object_BigInt__BigIntDesc);
187 if (i2) goto l60;
188 i2=0u;
189 goto l62;
190 l60:
191 i2 = *(OOC_INT8*)((_check_pointer(i0, 1634))+9);
192 i2 = i2<10;
193
194 l62:
195 if (!i2) goto l65;
196 i0 = *(OOC_INT8*)((_check_pointer(i0, 1755))+9);
197 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 1742))+80);
198 i2 = (OOC_INT64)pb;
199 i0 = (OOC_INT64)OOC_SSA__ProcBlockDesc_GetConst((OOC_SSA__ProcBlock)i2, (Object_Boxed__Object)i1, i0, (OOC_SymbolTable__Type)0);
200 return (OOC_SSA__Const)i0;
201 l65:
202 return (OOC_SSA__Const)0;
203 ;
204 }
205
OOC_SSA_ConstProp__Transform(OOC_SSA__ProcBlock pb)206 void OOC_SSA_ConstProp__Transform(OOC_SSA__ProcBlock pb) {
207 register OOC_INT64 i0,i1,i2,i3;
208 OOC_SSA__Instr instr;
209 OOC_SSA_ConstProp__Worklist worklist;
210 auto void OOC_SSA_ConstProp__Transform_AddToWorklist(OOC_SSA__Instr instr);
211 auto void OOC_SSA_ConstProp__Transform_SetInfo(OOC_SSA__Instr instr, OOC_SSA__Result info);
212 auto void OOC_SSA_ConstProp__Transform_AddUsesToWorklist(OOC_SSA__Result res);
213 auto void OOC_SSA_ConstProp__Transform_UpdateInfo(OOC_SSA__Instr instr, OOC_SSA__Result info);
214 auto void OOC_SSA_ConstProp__Transform_ClassifyInstr(OOC_SSA__Instr instr);
215
216 void OOC_SSA_ConstProp__Transform_AddToWorklist(OOC_SSA__Instr instr) {
217 register OOC_INT64 i0,i1,i2;
218 OOC_SSA_ConstProp__Worklist wl;
219
220 i0 = (OOC_INT64)instr;
221 i1 = *(OOC_INT32*)((_check_pointer(i0, 4235))+40);
222 i1 = i1==0;
223 if (!i1) goto l4;
224 *(OOC_INT32*)((_check_pointer(i0, 4267))+40) = 1;
225 i1 = (OOC_INT64)RT0__NewObject(_td_OOC_SSA_ConstProp__Worklist.baseTypes[0]);
226 wl = (OOC_SSA_ConstProp__Worklist)i1;
227 i2 = (OOC_INT64)worklist;
228 *(OOC_INT64*)(_check_pointer(i1, 4319)) = i2;
229 *(OOC_INT64*)((_check_pointer(i1, 4349))+8) = i0;
230 worklist = (OOC_SSA_ConstProp__Worklist)i1;
231 l4:
232 return;
233 ;
234 }
235
236
237 void OOC_SSA_ConstProp__Transform_SetInfo(OOC_SSA__Instr instr, OOC_SSA__Result info) {
238 register OOC_INT64 i0,i1,i2;
239 OOC_SSA__Result res;
240
241 i0 = (OOC_INT64)instr;
242 res = (OOC_SSA__Result)i0;
243 i1 = i0!=(OOC_INT64)0;
244 if (!i1) goto l8;
245 i1 = (OOC_INT64)info;
246
247 l3_loop:
248 *(OOC_INT64*)((_check_pointer(i0, 4583))+32) = i1;
249 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 4617));
250 res = (OOC_SSA__Result)i0;
251 i2 = i0!=(OOC_INT64)0;
252 if (i2) goto l3_loop;
253 l8:
254 return;
255 ;
256 }
257
258
259 void OOC_SSA_ConstProp__Transform_AddUsesToWorklist(OOC_SSA__Result res) {
260 register OOC_INT64 i0,i1,i2;
261 OOC_SSA__Opnd use;
262 OOC_SSA__Instr useInstr;
263
264 i0 = (OOC_INT64)res;
265 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 4791))+24);
266 use = (OOC_SSA__Opnd)i0;
267 i1 = i0!=(OOC_INT64)0;
268 if (!i1) goto l11;
269 l3_loop:
270 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 4852))+24);
271 useInstr = (OOC_SSA__Instr)i1;
272 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 4881))+32);
273 i2 = i2==(OOC_INT64)0;
274 if (!i2) goto l6;
275 OOC_SSA_ConstProp__Transform_AddToWorklist((OOC_SSA__Instr)i1);
276 l6:
277 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 4976))+32);
278 use = (OOC_SSA__Opnd)i0;
279 i1 = i0!=(OOC_INT64)0;
280 if (i1) goto l3_loop;
281 l11:
282 return;
283 ;
284 }
285
286
287 void OOC_SSA_ConstProp__Transform_UpdateInfo(OOC_SSA__Instr instr, OOC_SSA__Result info) {
288 register OOC_INT64 i0,i1,i2;
289 OOC_SSA__Result res;
290
291 i0 = (OOC_INT64)instr;
292 res = (OOC_SSA__Result)i0;
293 i1 = i0!=(OOC_INT64)0;
294 if (!i1) goto l8;
295 i1 = (OOC_INT64)info;
296
297 l3_loop:
298 *(OOC_INT64*)((_check_pointer(i0, 5188))+32) = i1;
299 OOC_SSA_ConstProp__Transform_AddUsesToWorklist((OOC_SSA__Result)i0);
300 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 5255));
301 res = (OOC_SSA__Result)i0;
302 i2 = i0!=(OOC_INT64)0;
303 if (i2) goto l3_loop;
304 l8:
305 return;
306 ;
307 }
308
309
310 void OOC_SSA_ConstProp__Transform_ClassifyInstr(OOC_SSA__Instr instr) {
311 register OOC_INT64 i0,i1,i2,i3,i4;
312 OOC_SSA__Opnd opnd;
313 OOC_SSA__Result state;
314 OOC_SSA__Result _const;
315 auto OOC_SSA__Opnd OOC_SSA_ConstProp__Transform_ClassifyInstr_MatchingPath(OOC_SSA__Const expr, OOC_CHAR8 isSwitch, OOC_SSA__Opnd branch);
316 auto void OOC_SSA_ConstProp__Transform_ClassifyInstr_ReplaceSelect(OOC_SSA__Instr select, OOC_SSA__Opnd branch);
317
318 OOC_SSA__Opnd OOC_SSA_ConstProp__Transform_ClassifyInstr_MatchingPath(OOC_SSA__Const expr, OOC_CHAR8 isSwitch, OOC_SSA__Opnd branch) {
319 register OOC_INT64 i0,i1,i2,i3,i4;
320 auto OOC_CHAR8 OOC_SSA_ConstProp__Transform_ClassifyInstr_MatchingPath_InLabelList(Object_Boxed__Object expr, OOC_SSA__Opnd opnd);
321
322 OOC_CHAR8 OOC_SSA_ConstProp__Transform_ClassifyInstr_MatchingPath_InLabelList(Object_Boxed__Object expr, OOC_SSA__Opnd opnd) {
323 register OOC_INT64 i0,i1,i2,i3;
324 Object_Boxed__Object lower;
325 Object_Boxed__Object upper;
326
327 i0 = (OOC_INT64)opnd;
328 i1 = i0!=(OOC_INT64)0;
329 if (!i1) goto l15;
330 i1 = (OOC_INT64)expr;
331
332 l3_loop:
333 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 5881));
334 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 5891)))), &_td_OOC_SSA__ConstDesc, 5891)), 5897))+80);
335 lower = (Object_Boxed__Object)i2;
336 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 5931))+16);
337 i3 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i3, 5941));
338 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i3, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i3, 5951)))), &_td_OOC_SSA__ConstDesc, 5951)), 5957))+80);
339 upper = (Object_Boxed__Object)i3;
340 i2 = OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 5987)))), Object_Boxed__ObjectDesc_Cmp)),Object_Boxed__ObjectDesc_Cmp)((Object_Boxed__Object)i2, (Object__Object)i1);
341 i2 = i2<=0;
342 if (i2) goto l6;
343 i2=0u;
344 goto l8;
345 l6:
346 i2 = OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 6013)))), Object_Boxed__ObjectDesc_Cmp)),Object_Boxed__ObjectDesc_Cmp)((Object_Boxed__Object)i1, (Object__Object)i3);
347 i2 = i2<=0;
348
349 l8:
350 if (!i2) goto l10;
351 return 1u;
352 l10:
353 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6106))+16);
354 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6116))+16);
355 opnd = (OOC_SSA__Opnd)i0;
356 i2 = i0!=(OOC_INT64)0;
357 if (i2) goto l3_loop;
358 l15:
359 return 0u;
360 ;
361 }
362
363
364 i0 = isSwitch;
365 if (i0) goto l22;
366 i0 = (OOC_INT64)branch;
367 i1 = i0!=(OOC_INT64)0;
368 if (i1) goto l5;
369 i1=0u;
370 goto l7;
371 l5:
372 i1 = *(OOC_INT8*)((_check_pointer(i0, 6678))+8);
373 i1 = i1==1;
374
375 l7:
376 if (!i1) goto l21;
377 i1 = (OOC_INT64)expr;
378
379 l9_loop:
380 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 6743));
381 i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 6720))+80);
382 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 6753)))), &_td_OOC_SSA__ConstDesc, 6753)), 6759))+80);
383 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 6720))+80);
384 i2 = OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i3, 6727)))), Object__ObjectDesc_Equals)),Object__ObjectDesc_Equals)((Object__Object)i4, (Object__Object)i2);
385 if (!i2) goto l12;
386 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6800))+16);
387 return (OOC_SSA__Opnd)i2;
388 l12:
389 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6857))+16);
390 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6867))+16);
391 branch = (OOC_SSA__Opnd)i0;
392 i2 = i0!=(OOC_INT64)0;
393 if (i2) goto l15;
394 i2=0u;
395 goto l17;
396 l15:
397 i2 = *(OOC_INT8*)((_check_pointer(i0, 6678))+8);
398 i2 = i2==1;
399
400 l17:
401 if (i2) goto l9_loop;
402 l21:
403 _assert(0u, 127, 6904);
404 goto l51;
405 l22:
406 i0 = (OOC_INT64)branch;
407 i1 = i0!=(OOC_INT64)0;
408 if (i1) goto l25;
409 i1=0u;
410 goto l27;
411 l25:
412 i1 = *(OOC_INT8*)((_check_pointer(i0, 6292))+8);
413 i1 = i1==16;
414
415 l27:
416 if (i1) goto l29;
417 i1=0u;
418 goto l31;
419 l29:
420 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 6340));
421 i1 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 6345)))), &_td_OOC_SSA__ConstDesc));
422
423 l31:
424 if (!i1) goto l50;
425 l34_loop:
426 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 6409));
427 i1 = (OOC_INT64)expr;
428 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 6419)))), &_td_OOC_SSA__InstrDesc, 6419)), 6425))+48);
429 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 6394))+80);
430 i0 = OOC_SSA_ConstProp__Transform_ClassifyInstr_MatchingPath_InLabelList((Object_Boxed__Object)i1, (OOC_SSA__Opnd)i0);
431 if (!i0) goto l37;
432 i0 = (OOC_INT64)branch;
433 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6469))+16);
434 return (OOC_SSA__Opnd)i0;
435 l37:
436 i0 = (OOC_INT64)branch;
437 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6526))+16);
438 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6536))+16);
439 branch = (OOC_SSA__Opnd)i0;
440 i1 = i0!=(OOC_INT64)0;
441 if (i1) goto l40;
442 i1=0u;
443 goto l42;
444 l40:
445 i1 = *(OOC_INT8*)((_check_pointer(i0, 6292))+8);
446 i1 = i1==16;
447
448 l42:
449 if (i1) goto l44;
450 i1=0u;
451 goto l46;
452 l44:
453 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 6340));
454 i1 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 6345)))), &_td_OOC_SSA__ConstDesc));
455
456 l46:
457 if (i1) goto l34_loop;
458 l50:
459 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 6586))+16);
460 return (OOC_SSA__Opnd)i0;
461 l51:
462 _failed_function(5501); return 0;
463 ;
464 }
465
466
467 void OOC_SSA_ConstProp__Transform_ClassifyInstr_ReplaceSelect(OOC_SSA__Instr select, OOC_SSA__Opnd branch) {
468 register OOC_INT64 i0,i1,i2;
469 OOC_SSA__Result res;
470 OOC_SSA__Opnd opnd;
471
472 i0 = (OOC_INT64)select;
473 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 7117));
474 res = (OOC_SSA__Result)i0;
475 i1 = (OOC_INT64)branch;
476 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 7149));
477 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 7154))+16);
478 i2 = *(OOC_INT8*)((_check_pointer(i2, 7161))+72);
479 i2 = i2==6;
480 if (i2) goto l3;
481 OOC_SSA_ConstProp__Transform_AddUsesToWorklist((OOC_SSA__Result)i0);
482 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 7693));
483 OOC_SSA__ResultDesc_ReplaceUses((OOC_SSA__Result)i0, (OOC_SSA__Result)i1);
484 goto l12;
485 l3:
486 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 7332));
487 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 7337))+16);
488 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 7344))+48);
489 opnd = (OOC_SSA__Opnd)i1;
490 i2 = i0!=0;
491 if (!i2) goto l12;
492 l6_loop:
493 OOC_SSA_ConstProp__Transform_AddUsesToWorklist((OOC_SSA__Result)i0);
494 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 7458));
495 OOC_SSA__ResultDesc_ReplaceUses((OOC_SSA__Result)i0, (OOC_SSA__Result)i2);
496 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 7488));
497 res = (OOC_SSA__Result)i0;
498 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 7526))+16);
499 opnd = (OOC_SSA__Opnd)i1;
500 i2 = i0!=0;
501 if (i2) goto l6_loop;
502 l12:
503 return;
504 ;
505 }
506
507
508 i0 = (OOC_INT64)instr;
509 i1 = *(OOC_INT8*)((_check_pointer(i0, 7770))+72);
510 switch (i1) {
511 case 6:
512 case 5:
513 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 7961))+48);
514 opnd = (OOC_SSA__Opnd)i1;
515 i2 = i1!=(OOC_INT64)0;
516 if (i2) goto l5;
517 i2=0u;
518 goto l7;
519 l5:
520 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 8007));
521 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 8012))+32);
522 i2 = i2!=(OOC_INT64)0;
523
524 l7:
525 if (!i2) goto l19;
526 l10_loop:
527 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8060))+16);
528 opnd = (OOC_SSA__Opnd)i1;
529 i2 = i1!=(OOC_INT64)0;
530 if (i2) goto l13;
531 i2=0u;
532 goto l15;
533 l13:
534 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 8007));
535 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 8012))+32);
536 i2 = i2!=(OOC_INT64)0;
537
538 l15:
539 if (i2) goto l10_loop;
540 l19:
541 i1 = i1==(OOC_INT64)0;
542 if (!i1) goto l57;
543 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8184))+24);
544 _assert((i1==(OOC_INT64)0), 127, 8171);
545 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 8225));
546 i1 = *(OOC_INT8*)((_check_pointer(i1, 8237))+8);
547 _assert((i1==2), 127, 8212);
548 i1 = *(OOC_INT8*)((_check_pointer(i0, 8281))+72);
549 i1 = i1==5;
550 if (i1) goto l24;
551 i1=0u;
552 goto l26;
553 l24:
554 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8328))+48);
555 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 8338));
556 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8343))+32);
557 i2 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
558 i1 = i1!=i2;
559
560 l26:
561 if (i1) goto l28;
562 i1 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
563 OOC_SSA_ConstProp__Transform_UpdateInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)i1);
564 goto l57;
565 l28:
566 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8721))+48);
567 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 8731))+16);
568 i2 = OOC_SSA__InstrDesc_IsSwitchStatm((OOC_SSA__Instr)i0);
569 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8578))+48);
570 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 8588));
571 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8593))+32);
572 i0 = (OOC_INT64)OOC_SSA_ConstProp__Transform_ClassifyInstr_MatchingPath((OOC_SSA__Const)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 8604)))), &_td_OOC_SSA__ConstDesc, 8604)), i2, (OOC_SSA__Opnd)i1);
573 i1 = (OOC_INT64)instr;
574 OOC_SSA_ConstProp__Transform_ClassifyInstr_ReplaceSelect((OOC_SSA__Instr)i1, (OOC_SSA__Opnd)i0);
575 goto l57;
576 default:
577 state = (OOC_SSA__Result)i0;
578 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 8976))+48);
579 i2 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
580 opnd = (OOC_SSA__Opnd)i1;
581 i3=i0;
582 l32_loop:
583 i4 = i1==(OOC_INT64)0;
584 if (i4) goto l44;
585 i4 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 9071));
586 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 9076))+32);
587 i4 = i4==(OOC_INT64)0;
588 if (i4) goto l41;
589 i4 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 9160));
590 i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 9165))+32);
591 i4 = i4==i2;
592 if (i4) goto l40;
593 goto l43;
594 l40:
595 state = (OOC_SSA__Result)i2;
596 i1=i2;
597 goto l45;
598 l41:
599 state = (OOC_SSA__Result)(OOC_INT64)0;
600 i3=(OOC_INT64)0;
601 l43:
602 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 9281))+16);
603 opnd = (OOC_SSA__Opnd)i1;
604
605 goto l32_loop;
606 l44:
607 i1=i3;
608 l45:
609 i3 = i1==i0;
610 if (i3) goto l51;
611 i1 = i1==i2;
612 if (!i1) goto l57;
613 OOC_SSA_ConstProp__Transform_UpdateInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)i2);
614 goto l57;
615 l51:
616 i1 = (OOC_INT64)pb;
617 i1 = (OOC_INT64)OOC_SSA_ConstProp__ComputeConst((OOC_SSA__ProcBlock)i1, (OOC_SSA__Instr)i0);
618 _const = (OOC_SSA__Result)i1;
619 i2 = i1==(OOC_INT64)0;
620 if (i2) goto l54;
621 i2 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 9617));
622 _assert((i2==(OOC_INT64)0), 127, 9604);
623 OOC_SSA_ConstProp__Transform_UpdateInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)i1);
624 goto l57;
625 l54:
626 i1 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
627 OOC_SSA_ConstProp__Transform_UpdateInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)i1);
628 goto l57;
629 }
630 l57:
631 return;
632 ;
633 }
634
635
636 i0 = (OOC_INT64)pb;
637 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 10179))+24);
638 instr = (OOC_SSA__Instr)i0;
639 i1 = i0!=(OOC_INT64)0;
640 if (!i1) goto l24;
641 l3_loop:
642 *(OOC_INT32*)((_check_pointer(i0, 10230))+40) = 0;
643 i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 10262)))), &_td_OOC_SSA__ConstDesc);
644 if (i1) goto l6;
645 i1 = *(OOC_INT8*)((_check_pointer(i0, 10285))+72);
646 i1 = i1==82;
647
648 goto l8;
649 l6:
650 i1=1u;
651 l8:
652 if (i1) goto l18;
653 i1 = *(OOC_INT8*)((_check_pointer(i0, 10406))+72);
654 i1 = i1!=5;
655 if (i1) goto l12;
656 i1=0u;
657 goto l14;
658 l12:
659 i1 = (OOC_INT64)OOC_SSA__InstrDesc_GetArgStore((OOC_SSA__Instr)i0);
660 i1 = i1!=(OOC_INT64)0;
661
662 l14:
663 if (i1) goto l16;
664 OOC_SSA_ConstProp__Transform_SetInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)(OOC_INT64)0);
665 goto l19;
666 l16:
667 i1 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
668 OOC_SSA_ConstProp__Transform_SetInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)i1);
669 goto l19;
670 l18:
671 *(OOC_INT64*)((_check_pointer(i0, 10329))+32) = i0;
672 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 10367));
673 _assert((i0==(OOC_INT64)0), 127, 10354);
674 l19:
675 i0 = (OOC_INT64)instr;
676 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 10859))+56);
677 instr = (OOC_SSA__Instr)i0;
678 i1 = i0!=(OOC_INT64)0;
679 if (i1) goto l3_loop;
680 l24:
681 i0 = (OOC_INT64)pb;
682 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 10895));
683 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 10909))+48);
684 i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 10919));
685 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 10924))+16);
686 i1 = *(OOC_INT8*)((_check_pointer(i1, 10931))+72);
687 _assert((i1==4), 127, 10885);
688 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 10972));
689 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 10986))+48);
690 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 10996));
691 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 11001))+16);
692 i1 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
693 OOC_SSA_ConstProp__Transform_SetInfo((OOC_SSA__Instr)i0, (OOC_SSA__Result)i1);
694 worklist = (OOC_SSA_ConstProp__Worklist)(OOC_INT64)0;
695 i0 = (OOC_INT64)pb;
696 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 11108))+24);
697 instr = (OOC_SSA__Instr)i0;
698 i1 = i0!=(OOC_INT64)0;
699 if (!i1) goto l39;
700 l27_loop:
701 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 11163))+32);
702 i1 = i1==(OOC_INT64)0;
703 if (i1) goto l30;
704 i1=0u;
705 goto l32;
706 l30:
707 i1 = *(OOC_INT32*)((_check_pointer(i0, 11194))+40);
708 i1 = i1==0;
709
710 l32:
711 if (!i1) goto l34;
712 OOC_SSA_ConstProp__Transform_ClassifyInstr((OOC_SSA__Instr)i0);
713 l34:
714 i0 = (OOC_INT64)instr;
715 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 11421))+56);
716 instr = (OOC_SSA__Instr)i0;
717 i1 = i0!=(OOC_INT64)0;
718 if (i1) goto l27_loop;
719 l39:
720 i0 = (OOC_INT64)worklist;
721 i0 = i0!=(OOC_INT64)0;
722 if (!i0) goto l47;
723 l42_loop:
724 i0 = (OOC_INT64)worklist;
725 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 11538))+8);
726 instr = (OOC_SSA__Instr)i1;
727 *(OOC_INT32*)((_check_pointer(i1, 11558))+40) = 0;
728 i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 11599));
729 worklist = (OOC_SSA_ConstProp__Worklist)i0;
730 i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 11626))+32);
731 _assert((i0==(OOC_INT64)0), 127, 11613);
732 OOC_SSA_ConstProp__Transform_ClassifyInstr((OOC_SSA__Instr)i1);
733 i0 = (OOC_INT64)worklist;
734 i0 = i0!=(OOC_INT64)0;
735 if (i0) goto l42_loop;
736 l47:
737 i0 = (OOC_INT64)pb;
738 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 11774))+24);
739 instr = (OOC_SSA__Instr)i1;
740 i2 = i1!=(OOC_INT64)0;
741 if (!i2) goto l66;
742 l50_loop:
743 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 11829))+32);
744 i2 = i2!=(OOC_INT64)0;
745 if (i2) goto l53;
746 i2=0u;
747 goto l55;
748 l53:
749 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 11869))+32);
750 i3 = (OOC_INT64)OOC_SSA_ConstProp__notConstant;
751 i2 = i2!=i3;
752
753 l55:
754 if (i2) goto l57;
755 i2=0u;
756 goto l59;
757 l57:
758 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 11908))+32);
759 i2 = i2!=i1;
760
761 l59:
762 if (!i2) goto l61;
763 i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 11962))+32);
764 OOC_SSA__ResultDesc_ReplaceUses((OOC_SSA__Result)i1, (OOC_SSA__Result)(_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 11973)))), &_td_OOC_SSA__ResultDesc, 11973)));
765 l61:
766 i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 12014))+56);
767 instr = (OOC_SSA__Instr)i1;
768 i2 = i1!=(OOC_INT64)0;
769 if (i2) goto l50_loop;
770 l66:
771 OOC_SSA_DeadCodeElimination__Transform((OOC_SSA__ProcBlock)i0);
772 return;
773 ;
774 }
775
OOC_OOC_SSA_ConstProp_init(void)776 void OOC_OOC_SSA_ConstProp_init(void) {
777 register OOC_INT64 i0;
778
779 i0 = (OOC_INT64)OOC_SSA__NewResult((OOC_SSA__Instr)(OOC_INT64)0, (-1), (-1));
780 OOC_SSA_ConstProp__notConstant = (OOC_SSA__Result)i0;
781 return;
782 ;
783 }
784
OOC_OOC_SSA_ConstProp_destroy(void)785 void OOC_OOC_SSA_ConstProp_destroy(void) {
786 }
787
788 /* --- */
789