Update ChangeLog and version files for release
[official-gcc.git] / gcc / testsuite / c-c++-common / rotate-2.c
blob4ffa218e4af68fd5b5fa6edb6cedad54594a364f
1 /* Check rotate pattern detection. */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fno-ipa-icf -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" } } */
9 unsigned int
10 f1 (unsigned int x, unsigned int y)
12 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
15 unsigned int
16 f2 (unsigned int x, unsigned long int y)
18 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
21 unsigned int
22 f3 (unsigned int x, int y __attribute__((unused)))
24 return (x << 1) | (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
27 unsigned int
28 f4 (unsigned int x, int y __attribute__((unused)))
30 return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) | (x >> 1);
33 unsigned short int
34 f5 (unsigned short int x, unsigned int y)
36 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
39 unsigned short int
40 f6 (unsigned short int x, unsigned long int y)
42 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
45 unsigned char
46 f7 (unsigned char x, unsigned int y)
48 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
51 unsigned char
52 f8 (unsigned char x, unsigned long int y)
54 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
57 unsigned int
58 f9 (unsigned int x, unsigned int y)
60 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
63 unsigned int
64 f10 (unsigned int x, unsigned long int y)
66 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
69 unsigned int
70 f11 (unsigned int x, int y __attribute__((unused)))
72 return (x << 1) | (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
75 unsigned int
76 f12 (unsigned int x, int y __attribute__((unused)))
78 return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) | (x >> 1);
81 unsigned short int
82 f13 (unsigned short int x, unsigned int y)
84 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
87 unsigned short int
88 f14 (unsigned short int x, unsigned long int y)
90 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
93 unsigned char
94 f15 (unsigned char x, unsigned int y)
96 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
99 unsigned char
100 f16 (unsigned char x, unsigned long int y)
102 return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
105 unsigned int
106 f17 (unsigned int x, unsigned int y)
108 return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
111 unsigned int
112 f18 (unsigned int x, unsigned long int y)
114 return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
117 unsigned int
118 f19 (unsigned int x, int y __attribute__((unused)))
120 return (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << 1);
123 unsigned int
124 f20 (unsigned int x, int y __attribute__((unused)))
126 return (x >> 1) ^ (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
129 unsigned short int
130 f21 (unsigned short int x, unsigned int y)
132 return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
135 unsigned short int
136 f22 (unsigned short int x, unsigned long int y)
138 return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
141 unsigned char
142 f23 (unsigned char x, unsigned int y)
144 return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
147 unsigned char
148 f24 (unsigned char x, unsigned long int y)
150 return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
153 unsigned int
154 f25 (unsigned int x, unsigned int y)
156 return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
159 unsigned int
160 f26 (unsigned int x, unsigned long int y)
162 return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
165 unsigned int
166 f27 (unsigned int x, int y __attribute__((unused)))
168 return (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << 1);
171 unsigned int
172 f28 (unsigned int x, int y __attribute__((unused)))
174 return (x >> 1) ^ (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
177 unsigned short int
178 f29 (unsigned short int x, unsigned int y)
180 return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
183 unsigned short int
184 f30 (unsigned short int x, unsigned long int y)
186 return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
189 unsigned char
190 f31 (unsigned char x, unsigned int y)
192 return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
195 unsigned char
196 f32 (unsigned char x, unsigned long int y)
198 return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
201 unsigned int
202 f33 (unsigned int x, unsigned int y)
204 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
207 unsigned int
208 f34 (unsigned int x, unsigned long int y)
210 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
213 unsigned int
214 f35 (unsigned int x, int y __attribute__((unused)))
216 return (x >> 1) | (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
219 unsigned int
220 f36 (unsigned int x, int y __attribute__((unused)))
222 return (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) | (x << 1);
225 unsigned short int
226 f37 (unsigned short int x, unsigned int y)
228 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
231 unsigned short int
232 f38 (unsigned short int x, unsigned long int y)
234 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
237 unsigned char
238 f39 (unsigned char x, unsigned int y)
240 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
243 unsigned char
244 f40 (unsigned char x, unsigned long int y)
246 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
249 unsigned int
250 f41 (unsigned int x, unsigned int y)
252 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
255 unsigned int
256 f42 (unsigned int x, unsigned long int y)
258 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
261 unsigned int
262 f43 (unsigned int x, int y __attribute__((unused)))
264 return (x >> 1) | (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
267 unsigned int
268 f44 (unsigned int x, int y __attribute__((unused)))
270 return (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) | (x << 1);
273 unsigned short int
274 f45 (unsigned short int x, unsigned int y)
276 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
279 unsigned short int
280 f46 (unsigned short int x, unsigned long int y)
282 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
285 unsigned char
286 f47 (unsigned char x, unsigned int y)
288 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
291 unsigned char
292 f48 (unsigned char x, unsigned long int y)
294 return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
297 unsigned int
298 f49 (unsigned int x, unsigned int y)
300 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
303 unsigned int
304 f50 (unsigned int x, unsigned long int y)
306 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
309 unsigned int
310 f51 (unsigned int x, int y __attribute__((unused)))
312 return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> 1);
315 unsigned int
316 f52 (unsigned int x, int y __attribute__((unused)))
318 return (x << 1) ^ (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
321 unsigned short int
322 f53 (unsigned short int x, unsigned int y)
324 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
327 unsigned short int
328 f54 (unsigned short int x, unsigned long int y)
330 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
333 unsigned char
334 f55 (unsigned char x, unsigned int y)
336 return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
339 unsigned char
340 f56 (unsigned char x, unsigned long int y)
342 return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
345 unsigned int
346 f57 (unsigned int x, unsigned int y)
348 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
351 unsigned int
352 f58 (unsigned int x, unsigned long int y)
354 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
357 unsigned int
358 f59 (unsigned int x, int y __attribute__((unused)))
360 return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> 1);
363 unsigned int
364 f60 (unsigned int x, int y __attribute__((unused)))
366 return (x << 1) ^ (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
369 unsigned short int
370 f61 (unsigned short int x, unsigned int y)
372 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
375 unsigned short int
376 f62 (unsigned short int x, unsigned long int y)
378 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
381 unsigned char
382 f63 (unsigned char x, unsigned int y)
384 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
387 unsigned char
388 f64 (unsigned char x, unsigned long int y)
390 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
393 unsigned int
394 f65 (unsigned int x, unsigned int y)
396 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
399 unsigned int
400 f66 (unsigned int x, unsigned long int y)
402 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
405 unsigned int
406 f67 (unsigned int x, int y __attribute__((unused)))
408 return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
411 unsigned int
412 f68 (unsigned int x, int y __attribute__((unused)))
414 return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> 1);
417 unsigned short int
418 f69 (unsigned short int x, unsigned int y)
420 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
423 unsigned short int
424 f70 (unsigned short int x, unsigned long int y)
426 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
429 unsigned char
430 f71 (unsigned char x, unsigned int y)
432 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
435 unsigned char
436 f72 (unsigned char x, unsigned long int y)
438 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
441 unsigned int
442 f73 (unsigned int x, unsigned int y)
444 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
447 unsigned int
448 f74 (unsigned int x, unsigned long int y)
450 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
453 unsigned int
454 f75 (unsigned int x, int y __attribute__((unused)))
456 return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
459 unsigned int
460 f76 (unsigned int x, int y __attribute__((unused)))
462 return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> 1);
465 unsigned short int
466 f77 (unsigned short int x, unsigned int y)
468 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
471 unsigned short int
472 f78 (unsigned short int x, unsigned long int y)
474 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
477 unsigned char
478 f79 (unsigned char x, unsigned int y)
480 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
483 unsigned char
484 f80 (unsigned char x, unsigned long int y)
486 return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
489 unsigned int
490 f81 (unsigned int x, unsigned int y)
492 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
495 unsigned int
496 f82 (unsigned int x, unsigned long int y)
498 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
501 unsigned int
502 f83 (unsigned int x, int y __attribute__((unused)))
504 return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> 1);
507 unsigned int
508 f84 (unsigned int x, int y __attribute__((unused)))
510 return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
513 unsigned short int
514 f85 (unsigned short int x, unsigned int y)
516 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
519 unsigned short int
520 f86 (unsigned short int x, unsigned long int y)
522 return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
525 unsigned char
526 f87 (unsigned char x, unsigned int y)
528 return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
531 unsigned char
532 f88 (unsigned char x, unsigned long int y)
534 return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
537 unsigned int
538 f89 (unsigned int x, unsigned int y)
540 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
543 unsigned int
544 f90 (unsigned int x, unsigned long int y)
546 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
549 unsigned int
550 f91 (unsigned int x, int y __attribute__((unused)))
552 return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> 1);
555 unsigned int
556 f92 (unsigned int x, int y __attribute__((unused)))
558 return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
561 unsigned short int
562 f93 (unsigned short int x, unsigned int y)
564 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
567 unsigned short int
568 f94 (unsigned short int x, unsigned long int y)
570 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
573 unsigned char
574 f95 (unsigned char x, unsigned int y)
576 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
579 unsigned char
580 f96 (unsigned char x, unsigned long int y)
582 return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);