1 /* Check rotate pattern detection. */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fdump-tree-optimized" } */
4 /* Rotates should be recognized only in functions with | instead of + or ^,
5 or in functions that have constant shift counts (unused attribute on y). */
6 /* { dg-final { scan-tree-dump-times "r\[<>]\[<>]" 48 "optimized" } } */
7 /* { dg-final { cleanup-tree-dump "optimized" } } */
10 f1 (unsigned int x
, int y
)
12 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
16 f2 (unsigned int x
, long int y
)
18 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
22 f3 (unsigned int x
, int y
__attribute__((unused
)))
24 return (x
<< 1) | (x
>> ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
28 f4 (unsigned int x
, int y
__attribute__((unused
)))
30 return (x
<< ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) | (x
>> 1);
34 f5 (unsigned short int x
, int y
)
36 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1)));
40 f6 (unsigned short int x
, long int y
)
42 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1)));
46 f7 (unsigned char x
, int y
)
48 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
- 1)));
52 f8 (unsigned char x
, long int y
)
54 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
- 1)));
58 f9 (unsigned int x
, int y
)
60 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
64 f10 (unsigned int x
, long int y
)
66 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
70 f11 (unsigned int x
, int y
__attribute__((unused
)))
72 return (x
<< 1) | (x
>> ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
76 f12 (unsigned int x
, int y
__attribute__((unused
)))
78 return (x
<< ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) | (x
>> 1);
82 f13 (unsigned short int x
, int y
)
84 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1)));
88 f14 (unsigned short int x
, long int y
)
90 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1)));
94 f15 (unsigned char x
, int y
)
96 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1)));
100 f16 (unsigned char x
, long int y
)
102 return (x
<< y
) | (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1)));
106 f17 (unsigned int x
, int y
)
108 return (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) ^ (x
<< y
);
112 f18 (unsigned int x
, long int y
)
114 return (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) ^ (x
<< y
);
118 f19 (unsigned int x
, int y
__attribute__((unused
)))
120 return (x
>> ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) ^ (x
<< 1);
124 f20 (unsigned int x
, int y
__attribute__((unused
)))
126 return (x
>> 1) ^ (x
<< ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
130 f21 (unsigned short int x
, int y
)
132 return (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1))) ^ (x
<< y
);
136 f22 (unsigned short int x
, long int y
)
138 return (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1))) ^ (x
<< y
);
142 f23 (unsigned char x
, int y
)
144 return (x
>> ((-y
) & (__CHAR_BIT__
- 1))) ^ (x
<< y
);
148 f24 (unsigned char x
, long int y
)
150 return (x
>> ((-y
) & (__CHAR_BIT__
- 1))) ^ (x
<< y
);
154 f25 (unsigned int x
, int y
)
156 return (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) ^ (x
<< y
);
160 f26 (unsigned int x
, long int y
)
162 return (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) ^ (x
<< y
);
166 f27 (unsigned int x
, int y
__attribute__((unused
)))
168 return (x
>> ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) ^ (x
<< 1);
172 f28 (unsigned int x
, int y
__attribute__((unused
)))
174 return (x
>> 1) ^ (x
<< ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
178 f29 (unsigned short int x
, int y
)
180 return (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1))) ^ (x
<< y
);
184 f30 (unsigned short int x
, long int y
)
186 return (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1))) ^ (x
<< y
);
190 f31 (unsigned char x
, int y
)
192 return (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1))) ^ (x
<< y
);
196 f32 (unsigned char x
, long int y
)
198 return (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1))) ^ (x
<< y
);
202 f33 (unsigned int x
, int y
)
204 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
208 f34 (unsigned int x
, long int y
)
210 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
214 f35 (unsigned int x
, int y
__attribute__((unused
)))
216 return (x
>> 1) | (x
<< ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
220 f36 (unsigned int x
, int y
__attribute__((unused
)))
222 return (x
>> ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) | (x
<< 1);
226 f37 (unsigned short int x
, int y
)
228 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1)));
232 f38 (unsigned short int x
, long int y
)
234 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1)));
238 f39 (unsigned char x
, int y
)
240 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
- 1)));
244 f40 (unsigned char x
, long int y
)
246 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
- 1)));
250 f41 (unsigned int x
, int y
)
252 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
256 f42 (unsigned int x
, long int y
)
258 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
262 f43 (unsigned int x
, int y
__attribute__((unused
)))
264 return (x
>> 1) | (x
<< ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
268 f44 (unsigned int x
, int y
__attribute__((unused
)))
270 return (x
>> ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) | (x
<< 1);
274 f45 (unsigned short int x
, int y
)
276 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1)));
280 f46 (unsigned short int x
, long int y
)
282 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1)));
286 f47 (unsigned char x
, int y
)
288 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1)));
292 f48 (unsigned char x
, long int y
)
294 return (x
>> y
) | (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1)));
298 f49 (unsigned int x
, int y
)
300 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) ^ (x
>> y
);
304 f50 (unsigned int x
, long int y
)
306 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) ^ (x
>> y
);
310 f51 (unsigned int x
, int y
__attribute__((unused
)))
312 return (x
<< ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) ^ (x
>> 1);
316 f52 (unsigned int x
, int y
__attribute__((unused
)))
318 return (x
<< 1) ^ (x
>> ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
322 f53 (unsigned short int x
, int y
)
324 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1))) ^ (x
>> y
);
328 f54 (unsigned short int x
, long int y
)
330 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1))) ^ (x
>> y
);
334 f55 (unsigned char x
, int y
)
336 return (x
<< ((-y
) & (__CHAR_BIT__
- 1))) ^ (x
>> y
);
340 f56 (unsigned char x
, long int y
)
342 return (x
<< ((-y
) & (__CHAR_BIT__
- 1))) ^ (x
>> y
);
346 f57 (unsigned int x
, int y
)
348 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) ^ (x
>> y
);
352 f58 (unsigned int x
, long int y
)
354 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) ^ (x
>> y
);
358 f59 (unsigned int x
, int y
__attribute__((unused
)))
360 return (x
<< ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) ^ (x
>> 1);
364 f60 (unsigned int x
, int y
__attribute__((unused
)))
366 return (x
<< 1) ^ (x
>> ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
370 f61 (unsigned short int x
, int y
)
372 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1))) ^ (x
>> y
);
376 f62 (unsigned short int x
, long int y
)
378 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1))) ^ (x
>> y
);
382 f63 (unsigned char x
, int y
)
384 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1))) ^ (x
>> y
);
388 f64 (unsigned char x
, long int y
)
390 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1))) ^ (x
>> y
);
394 f65 (unsigned int x
, int y
)
396 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
400 f66 (unsigned int x
, long int y
)
402 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
406 f67 (unsigned int x
, int y
__attribute__((unused
)))
408 return (x
<< 1) + (x
>> ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
412 f68 (unsigned int x
, int y
__attribute__((unused
)))
414 return (x
<< ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) + (x
>> 1);
418 f69 (unsigned short int x
, int y
)
420 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1)));
424 f70 (unsigned short int x
, long int y
)
426 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1)));
430 f71 (unsigned char x
, int y
)
432 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
- 1)));
436 f72 (unsigned char x
, long int y
)
438 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
- 1)));
442 f73 (unsigned int x
, int y
)
444 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
448 f74 (unsigned int x
, long int y
)
450 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
454 f75 (unsigned int x
, int y
__attribute__((unused
)))
456 return (x
<< 1) + (x
>> ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
460 f76 (unsigned int x
, int y
__attribute__((unused
)))
462 return (x
<< ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) + (x
>> 1);
466 f77 (unsigned short int x
, int y
)
468 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1)));
472 f78 (unsigned short int x
, long int y
)
474 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1)));
478 f79 (unsigned char x
, int y
)
480 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1)));
484 f80 (unsigned char x
, long int y
)
486 return (x
<< y
) + (x
>> ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1)));
490 f81 (unsigned int x
, int y
)
492 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) + (x
>> y
);
496 f82 (unsigned int x
, long int y
)
498 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) + (x
>> y
);
502 f83 (unsigned int x
, int y
__attribute__((unused
)))
504 return (x
<< ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1))) + (x
>> 1);
508 f84 (unsigned int x
, int y
__attribute__((unused
)))
510 return (x
<< 1) + (x
>> ((-1) & (__CHAR_BIT__
* __SIZEOF_INT__
- 1)));
514 f85 (unsigned short int x
, int y
)
516 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1))) + (x
>> y
);
520 f86 (unsigned short int x
, long int y
)
522 return (x
<< ((-y
) & (__CHAR_BIT__
* __SIZEOF_SHORT__
- 1))) + (x
>> y
);
526 f87 (unsigned char x
, int y
)
528 return (x
<< ((-y
) & (__CHAR_BIT__
- 1))) + (x
>> y
);
532 f88 (unsigned char x
, long int y
)
534 return (x
<< ((-y
) & (__CHAR_BIT__
- 1))) + (x
>> y
);
538 f89 (unsigned int x
, int y
)
540 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) + (x
>> y
);
544 f90 (unsigned int x
, long int y
)
546 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) + (x
>> y
);
550 f91 (unsigned int x
, int y
__attribute__((unused
)))
552 return (x
<< ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1))) + (x
>> 1);
556 f92 (unsigned int x
, int y
__attribute__((unused
)))
558 return (x
<< 1) + (x
>> ((-1) & (__CHAR_BIT__
* sizeof (unsigned int) - 1)));
562 f93 (unsigned short int x
, int y
)
564 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1))) + (x
>> y
);
568 f94 (unsigned short int x
, long int y
)
570 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned short) - 1))) + (x
>> y
);
574 f95 (unsigned char x
, int y
)
576 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1))) + (x
>> y
);
580 f96 (unsigned char x
, long int y
)
582 return (x
<< ((-y
) & (__CHAR_BIT__
* sizeof (unsigned char) - 1))) + (x
>> y
);