996
|
1 /* Automatically generated output, edit source and recompile to change */
|
|
2 #include "oil.h"
|
|
3 int optimize_pass1_d(node *np)
|
|
4 { int opted=0;
|
|
5 unsigned long c,c1,c2,c3,c4,c5,c6,c7,c8,c9;
|
|
6 unsigned long x,x1,x2,x3,x4,x5,x6,x7,x8,x9,r;
|
|
7 int tempw;
|
|
8 node *tp;
|
|
9 checknodeactbits(np);
|
|
10 if(np->opcode==C_AND)
|
|
11 do
|
|
12 {
|
|
13 if(!nodessame(np->lval,np->rval)) break;
|
|
14 x1=np->rval->constant; c1=np->rval->optdata;
|
|
15 OPTING(anditself);
|
|
16 tp=newnode();
|
|
17 tp=np->rval;
|
|
18 np->rval=0;
|
|
19 nodefree(np->lval); nodefree(np->rval);
|
|
20 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
21 } while(0);
|
|
22
|
|
23 checknodeactbits(np);
|
|
24 if(np->opcode==C_OR)
|
|
25 do
|
|
26 {
|
|
27 if(!nodessame(np->lval,np->rval)) break;
|
|
28 x1=np->rval->constant; c1=np->rval->optdata;
|
|
29 OPTING(oritself);
|
|
30 tp=newnode();
|
|
31 tp=np->rval;
|
|
32 np->rval=0;
|
|
33 nodefree(np->lval); nodefree(np->rval);
|
|
34 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
35 } while(0);
|
|
36
|
|
37 checknodeactbits(np);
|
|
38 if(np->opcode==C_XOR)
|
|
39 do
|
|
40 {
|
|
41 if(!nodessame(np->lval,np->rval)) break;
|
|
42 x1=np->rval->constant; c1=np->rval->optdata;
|
|
43 OPTING(xoritself);
|
|
44 tp=newnode();
|
|
45 MAYBENEWNODE(tp);
|
|
46 tp->opcode=MESH32;
|
|
47 tp->width=32;
|
|
48 tp->constant=(0LU);
|
|
49 nodefree(np->lval); nodefree(np->rval);
|
|
50 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
51 } while(0);
|
|
52
|
|
53 checknodeactbits(np);
|
|
54 if(np->opcode==C_XOR &&
|
|
55 np->lval->opcode==C_XOR)
|
|
56 do
|
|
57 {
|
|
58 x2=np->lval->rval->constant; c2=np->lval->rval->optdata;
|
|
59 if(!nodessame(np->lval->lval,np->rval)) break;
|
|
60 x1=np->rval->constant; c1=np->rval->optdata;
|
|
61 OPTING(xoritself);
|
|
62 tp=newnode();
|
|
63 tp=np->lval->rval;
|
|
64 np->lval->rval=0;
|
|
65 nodefree(np->lval); nodefree(np->rval);
|
|
66 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
67 } while(0);
|
|
68
|
|
69 checknodeactbits(np);
|
|
70 if(np->opcode==C_XOR &&
|
|
71 np->lval->opcode==C_XOR)
|
|
72 do
|
|
73 {
|
|
74 x2=np->lval->lval->constant; c2=np->lval->lval->optdata;
|
|
75 if(!nodessame(np->lval->rval,np->rval)) break;
|
|
76 x1=np->rval->constant; c1=np->rval->optdata;
|
|
77 OPTING(xoritself);
|
|
78 tp=newnode();
|
|
79 tp=np->lval->lval;
|
|
80 np->lval->lval=0;
|
|
81 nodefree(np->lval); nodefree(np->rval);
|
|
82 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
83 } while(0);
|
|
84
|
|
85 checknodeactbits(np);
|
|
86 if(np->opcode==C_XOR &&
|
|
87 np->rval->opcode==C_XOR)
|
|
88 do
|
|
89 {
|
|
90 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
91 if(!nodessame(np->lval,np->rval->lval)) break;
|
|
92 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
93 OPTING(xoritself);
|
|
94 tp=newnode();
|
|
95 tp=np->rval->rval;
|
|
96 np->rval->rval=0;
|
|
97 nodefree(np->lval); nodefree(np->rval);
|
|
98 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
99 } while(0);
|
|
100
|
|
101 checknodeactbits(np);
|
|
102 if(np->opcode==C_XOR &&
|
|
103 np->rval->opcode==C_XOR)
|
|
104 do
|
|
105 {
|
|
106 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
107 if(!nodessame(np->lval,np->rval->rval)) break;
|
|
108 x1=np->rval->rval->constant; c1=np->rval->rval->optdata;
|
|
109 OPTING(xoritself);
|
|
110 tp=newnode();
|
|
111 tp=np->rval->lval;
|
|
112 np->rval->lval=0;
|
|
113 nodefree(np->lval); nodefree(np->rval);
|
|
114 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
115 } while(0);
|
|
116
|
|
117 checknodeactbits(np);
|
|
118 if(np->opcode==C_LOGICALNOT &&
|
|
119 np->rval->opcode==C_XOR)
|
|
120 do
|
|
121 {
|
|
122 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
123 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
124 OPTING(xortoequal);
|
|
125 tp=newnode();
|
|
126 MAYBENEWNODE(tp);
|
|
127 tp->opcode=C_ISEQUAL;
|
|
128 tp->width=16;
|
|
129 tp->lval=np->rval->lval;
|
|
130 np->rval->lval=0;
|
|
131 tp->rval=np->rval->rval;
|
|
132 np->rval->rval=0;
|
|
133 nodefree(np->lval); nodefree(np->rval);
|
|
134 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
135 } while(0);
|
|
136
|
|
137 checknodeactbits(np);
|
|
138 if(np->opcode==C_LOGICALNOT &&
|
|
139 np->rval->opcode==C_ISEQUAL)
|
|
140 do
|
|
141 {
|
|
142 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
143 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
144 OPTING(negatingequal);
|
|
145 tp=newnode();
|
|
146 MAYBENEWNODE(tp);
|
|
147 tp->opcode=C_NOTEQUAL;
|
|
148 tp->width=16;
|
|
149 tp->lval=np->rval->lval;
|
|
150 np->rval->lval=0;
|
|
151 tp->rval=np->rval->rval;
|
|
152 np->rval->rval=0;
|
|
153 nodefree(np->lval); nodefree(np->rval);
|
|
154 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
155 } while(0);
|
|
156
|
|
157 checknodeactbits(np);
|
|
158 if(np->opcode==C_LOGICALNOT &&
|
|
159 np->rval->opcode==C_NOTEQUAL)
|
|
160 do
|
|
161 {
|
|
162 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
163 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
164 OPTING(negatingequal);
|
|
165 tp=newnode();
|
|
166 MAYBENEWNODE(tp);
|
|
167 tp->opcode=C_ISEQUAL;
|
|
168 tp->width=16;
|
|
169 tp->lval=np->rval->lval;
|
|
170 np->rval->lval=0;
|
|
171 tp->rval=np->rval->rval;
|
|
172 np->rval->rval=0;
|
|
173 nodefree(np->lval); nodefree(np->rval);
|
|
174 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
175 } while(0);
|
|
176
|
|
177 checknodeactbits(np);
|
|
178 if(np->opcode==SELECT &&
|
|
179 np->lval->opcode==SELECT &&
|
|
180 np->lval->rval->width==32 &&
|
|
181 np->rval->opcode==C_XOR &&
|
|
182 np->rval->lval->opcode==XOR &&
|
|
183 np->rval->lval->width==32 &&
|
|
184 np->rval->lval->rval->opcode==SELECT &&
|
|
185 np->rval->lval->rval->lval->width==32 &&
|
|
186 np->rval->lval->rval->rval->width==32 &&
|
|
187 (np->rval->rval->opcode==MESH || np->rval->rval->opcode==MESH32) &&
|
|
188 np->rval->rval->constant==2147483648LU)
|
|
189 do
|
|
190 {
|
|
191 if(!nodessame(np->lval->rval,np->rval->lval->rval->lval)) break;
|
|
192 if(!nodessame(np->rval->lval->rval->lval,np->rval->lval->rval->rval)) break;
|
|
193 x2=np->rval->lval->rval->rval->constant; c2=np->rval->lval->rval->rval->optdata;
|
|
194 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
195 OPTING(greaterthan32);
|
|
196 tp=newnode();
|
|
197 MAYBENEWNODE(tp);
|
|
198 tp->opcode=C_GREATER;
|
|
199 tp->width=32;
|
|
200 tp->lval=nodecopy(np->lval->lval);
|
|
201 MAYBENEWNODE(tp->rval);
|
|
202 tp->rval->opcode=C_XOR;
|
|
203 tp->rval->width=32;
|
|
204 tp->rval->lval=np->rval->lval->rval->rval;
|
|
205 np->rval->lval->rval->rval=0;
|
|
206 tp->rval->rval=np->lval->lval;
|
|
207 np->lval->lval=0;
|
|
208 nodefree(np->lval); nodefree(np->rval);
|
|
209 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
210 } while(0);
|
|
211
|
|
212 checknodeactbits(np);
|
|
213 if(np->opcode==SELECT &&
|
|
214 np->lval->opcode==SELECT &&
|
|
215 np->lval->rval->width==32 &&
|
|
216 np->rval->opcode==C_XOR &&
|
|
217 (np->rval->lval->opcode==MESH || np->rval->lval->opcode==MESH32) &&
|
|
218 np->rval->lval->constant==2147483648LU &&
|
|
219 np->rval->rval->opcode==XOR &&
|
|
220 np->rval->rval->width==32 &&
|
|
221 np->rval->rval->rval->opcode==SELECT &&
|
|
222 np->rval->rval->rval->lval->width==32 &&
|
|
223 np->rval->rval->rval->rval->width==32)
|
|
224 do
|
|
225 {
|
|
226 if(!nodessame(np->lval->rval,np->rval->rval->rval->lval)) break;
|
|
227 if(!nodessame(np->rval->rval->rval->lval,np->rval->rval->rval->rval)) break;
|
|
228 x2=np->rval->rval->rval->rval->constant; c2=np->rval->rval->rval->rval->optdata;
|
|
229 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
230 OPTING(greaterthan32);
|
|
231 tp=newnode();
|
|
232 MAYBENEWNODE(tp);
|
|
233 tp->opcode=C_GREATER;
|
|
234 tp->width=32;
|
|
235 tp->lval=nodecopy(np->lval->lval);
|
|
236 MAYBENEWNODE(tp->rval);
|
|
237 tp->rval->opcode=C_XOR;
|
|
238 tp->rval->width=32;
|
|
239 tp->rval->lval=np->rval->rval->rval->rval;
|
|
240 np->rval->rval->rval->rval=0;
|
|
241 tp->rval->rval=np->lval->lval;
|
|
242 np->lval->lval=0;
|
|
243 nodefree(np->lval); nodefree(np->rval);
|
|
244 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
245 } while(0);
|
|
246
|
|
247 checknodeactbits(np);
|
|
248 if(np->opcode==SELECT &&
|
|
249 np->lval->opcode==SELECT &&
|
|
250 np->lval->rval->width==16 &&
|
|
251 np->rval->opcode==C_XOR &&
|
|
252 np->rval->lval->opcode==XOR &&
|
|
253 np->rval->lval->width==16 &&
|
|
254 np->rval->lval->rval->opcode==SELECT &&
|
|
255 np->rval->lval->rval->lval->width==16 &&
|
|
256 np->rval->lval->rval->rval->width==16 &&
|
|
257 (np->rval->rval->opcode==MESH || np->rval->rval->opcode==MESH32) &&
|
|
258 np->rval->rval->constant==32768LU)
|
|
259 do
|
|
260 {
|
|
261 if(!nodessame(np->lval->rval,np->rval->lval->rval->lval)) break;
|
|
262 if(!nodessame(np->rval->lval->rval->lval,np->rval->lval->rval->rval)) break;
|
|
263 x2=np->rval->lval->rval->rval->constant; c2=np->rval->lval->rval->rval->optdata;
|
|
264 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
265 OPTING(greaterthan16);
|
|
266 tp=newnode();
|
|
267 MAYBENEWNODE(tp);
|
|
268 tp->opcode=C_GREATER;
|
|
269 tp->width=32;
|
|
270 tp->lval=nodecopy(np->lval->lval);
|
|
271 MAYBENEWNODE(tp->rval);
|
|
272 tp->rval->opcode=C_XOR;
|
|
273 tp->rval->width=32;
|
|
274 tp->rval->lval=np->rval->lval->rval->rval;
|
|
275 np->rval->lval->rval->rval=0;
|
|
276 tp->rval->rval=np->lval->lval;
|
|
277 np->lval->lval=0;
|
|
278 nodefree(np->lval); nodefree(np->rval);
|
|
279 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
280 } while(0);
|
|
281
|
|
282 checknodeactbits(np);
|
|
283 if(np->opcode==SELECT &&
|
|
284 np->lval->opcode==SELECT &&
|
|
285 np->lval->rval->width==16 &&
|
|
286 np->rval->opcode==C_XOR &&
|
|
287 (np->rval->lval->opcode==MESH || np->rval->lval->opcode==MESH32) &&
|
|
288 np->rval->lval->constant==32768LU &&
|
|
289 np->rval->rval->opcode==XOR &&
|
|
290 np->rval->rval->width==16 &&
|
|
291 np->rval->rval->rval->opcode==SELECT &&
|
|
292 np->rval->rval->rval->lval->width==16 &&
|
|
293 np->rval->rval->rval->rval->width==16)
|
|
294 do
|
|
295 {
|
|
296 if(!nodessame(np->lval->rval,np->rval->rval->rval->lval)) break;
|
|
297 if(!nodessame(np->rval->rval->rval->lval,np->rval->rval->rval->rval)) break;
|
|
298 x2=np->rval->rval->rval->rval->constant; c2=np->rval->rval->rval->rval->optdata;
|
|
299 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
300 OPTING(greaterthan16);
|
|
301 tp=newnode();
|
|
302 MAYBENEWNODE(tp);
|
|
303 tp->opcode=C_GREATER;
|
|
304 tp->width=32;
|
|
305 tp->lval=nodecopy(np->lval->lval);
|
|
306 MAYBENEWNODE(tp->rval);
|
|
307 tp->rval->opcode=C_XOR;
|
|
308 tp->rval->width=32;
|
|
309 tp->rval->lval=np->rval->rval->rval->rval;
|
|
310 np->rval->rval->rval->rval=0;
|
|
311 tp->rval->rval=np->lval->lval;
|
|
312 np->lval->lval=0;
|
|
313 nodefree(np->lval); nodefree(np->rval);
|
|
314 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
315 } while(0);
|
|
316
|
|
317 checknodeactbits(np);
|
|
318 if(np->opcode==C_AND &&
|
|
319 np->lval->opcode==C_XOR)
|
|
320 do
|
|
321 {
|
|
322 if(!nodessame(np->lval->rval,np->rval)) break;
|
|
323 x2=np->rval->constant; c2=np->rval->optdata;
|
|
324 x1=np->lval->lval->constant; c1=np->lval->lval->optdata;
|
|
325 OPTING(xoroutsideand);
|
|
326 tp=newnode();
|
|
327 MAYBENEWNODE(tp);
|
|
328 tp->opcode=C_XOR;
|
|
329 tp->width=32;
|
|
330 MAYBENEWNODE(tp->lval);
|
|
331 tp->lval->opcode=C_AND;
|
|
332 tp->lval->width=32;
|
|
333 tp->lval->lval=np->lval->lval;
|
|
334 np->lval->lval=0;
|
|
335 tp->lval->rval=nodecopy(np->rval);
|
|
336 tp->rval=np->rval;
|
|
337 np->rval=0;
|
|
338 nodefree(np->lval); nodefree(np->rval);
|
|
339 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
340 } while(0);
|
|
341
|
|
342 checknodeactbits(np);
|
|
343 if(np->opcode==C_AND &&
|
|
344 np->rval->opcode==C_XOR)
|
|
345 do
|
|
346 {
|
|
347 if(!nodessame(np->lval,np->rval->rval)) break;
|
|
348 x2=np->rval->rval->constant; c2=np->rval->rval->optdata;
|
|
349 x1=np->rval->lval->constant; c1=np->rval->lval->optdata;
|
|
350 OPTING(xoroutsideand);
|
|
351 tp=newnode();
|
|
352 MAYBENEWNODE(tp);
|
|
353 tp->opcode=C_XOR;
|
|
354 tp->width=32;
|
|
355 MAYBENEWNODE(tp->lval);
|
|
356 tp->lval->opcode=C_AND;
|
|
357 tp->lval->width=32;
|
|
358 tp->lval->lval=np->rval->lval;
|
|
359 np->rval->lval=0;
|
|
360 tp->lval->rval=nodecopy(np->rval->rval);
|
|
361 tp->rval=np->rval->rval;
|
|
362 np->rval->rval=0;
|
|
363 nodefree(np->lval); nodefree(np->rval);
|
|
364 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
365 } while(0);
|
|
366
|
|
367 checknodeactbits(np);
|
|
368 if(np->opcode==C_AND &&
|
|
369 np->lval->opcode==C_XOR)
|
|
370 do
|
|
371 {
|
|
372 if(!nodessame(np->lval->lval,np->rval)) break;
|
|
373 x2=np->rval->constant; c2=np->rval->optdata;
|
|
374 x1=np->lval->rval->constant; c1=np->lval->rval->optdata;
|
|
375 OPTING(xoroutsideand);
|
|
376 tp=newnode();
|
|
377 MAYBENEWNODE(tp);
|
|
378 tp->opcode=C_XOR;
|
|
379 tp->width=32;
|
|
380 MAYBENEWNODE(tp->lval);
|
|
381 tp->lval->opcode=C_AND;
|
|
382 tp->lval->width=32;
|
|
383 tp->lval->lval=np->lval->rval;
|
|
384 np->lval->rval=0;
|
|
385 tp->lval->rval=nodecopy(np->rval);
|
|
386 tp->rval=np->rval;
|
|
387 np->rval=0;
|
|
388 nodefree(np->lval); nodefree(np->rval);
|
|
389 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
390 } while(0);
|
|
391
|
|
392 checknodeactbits(np);
|
|
393 if(np->opcode==C_AND &&
|
|
394 np->rval->opcode==C_XOR)
|
|
395 do
|
|
396 {
|
|
397 if(!nodessame(np->lval,np->rval->lval)) break;
|
|
398 x2=np->rval->lval->constant; c2=np->rval->lval->optdata;
|
|
399 x1=np->rval->rval->constant; c1=np->rval->rval->optdata;
|
|
400 OPTING(xoroutsideand);
|
|
401 tp=newnode();
|
|
402 MAYBENEWNODE(tp);
|
|
403 tp->opcode=C_XOR;
|
|
404 tp->width=32;
|
|
405 MAYBENEWNODE(tp->lval);
|
|
406 tp->lval->opcode=C_AND;
|
|
407 tp->lval->width=32;
|
|
408 tp->lval->lval=np->rval->rval;
|
|
409 np->rval->rval=0;
|
|
410 tp->lval->rval=nodecopy(np->rval->lval);
|
|
411 tp->rval=np->rval->lval;
|
|
412 np->rval->lval=0;
|
|
413 nodefree(np->lval); nodefree(np->rval);
|
|
414 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
415 } while(0);
|
|
416
|
|
417 checknodeactbits(np);
|
|
418 if(np->opcode==C_XOR &&
|
|
419 (np->rval->opcode==MESH || np->rval->opcode==MESH32) &&
|
|
420 np->rval->constant==1LU)
|
|
421 do
|
|
422 {
|
|
423 x1=np->lval->constant; c1=np->lval->optdata;
|
|
424 x=x1; c=c1; if(!(c==1)) break;
|
|
425 OPTING(booleannot);
|
|
426 tp=newnode();
|
|
427 MAYBENEWNODE(tp);
|
|
428 tp->opcode=C_LOGICALNOT;
|
|
429 tp->width=16;
|
|
430 tp->rval=np->lval;
|
|
431 np->lval=0;
|
|
432 nodefree(np->lval); nodefree(np->rval);
|
|
433 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
434 } while(0);
|
|
435
|
|
436 checknodeactbits(np);
|
|
437 if(np->opcode==C_MINUS &&
|
|
438 (np->lval->opcode==MESH || np->lval->opcode==MESH32) &&
|
|
439 np->lval->constant==2LU &&
|
|
440 np->rval->opcode==C_LOGICALNOT)
|
|
441 do
|
|
442 {
|
|
443 x1=np->rval->rval->constant; c1=np->rval->rval->optdata;
|
|
444 x=x1; c=c1; if(!(c==1)) break;
|
|
445 OPTING(not21);
|
|
446 tp=newnode();
|
|
447 MAYBENEWNODE(tp);
|
|
448 tp->opcode=C_PLUS;
|
|
449 tp->width=32;
|
|
450 tp->lval=np->rval->rval;
|
|
451 np->rval->rval=0;
|
|
452 MAYBENEWNODE(tp->rval);
|
|
453 tp->rval->opcode=MESH32;
|
|
454 tp->rval->width=32;
|
|
455 tp->rval->constant=(1LU);
|
|
456 nodefree(np->lval); nodefree(np->rval);
|
|
457 tempw=np->width; *np=*tp; np->width=tempw; free(tp);
|
|
458 } while(0);
|
|
459
|
|
460 c=c1=c2=c3=c4=c5=c6=c7=c8=c9=0;
|
|
461 x=x1=x2=x3=x4=x5=x6=x7=x8=x9=r=0;
|
|
462 if(c+c1+c2+c3+c4+c5+c6+c7+c8+c9+r+
|
|
463 x+x1+x2+x3+x4+x5+x6+x7+x8+x9) raise(SIGSEGV);
|
|
464 return opted;
|
|
465 }
|