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