mirror of git://gcc.gnu.org/git/gcc.git
583 lines
13 KiB
C
583 lines
13 KiB
C
/* Check rotate pattern detection. */
|
|
/* { dg-do compile } */
|
|
/* { dg-options "-O2 -fno-ipa-icf -fdump-tree-optimized" } */
|
|
/* Rotates should be recognized only in functions with | instead of + or ^,
|
|
or in functions that have constant shift counts (unused attribute on y). */
|
|
/* { dg-final { scan-tree-dump-times "r\[<>]\[<>]" 48 "optimized" } } */
|
|
|
|
unsigned int
|
|
f1 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f2 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f3 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) | (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f4 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) | (x >> 1);
|
|
}
|
|
|
|
unsigned short int
|
|
f5 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f6 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f7 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f8 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f9 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f10 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f11 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) | (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f12 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) | (x >> 1);
|
|
}
|
|
|
|
unsigned short int
|
|
f13 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f14 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f15 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f16 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f17 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned int
|
|
f18 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned int
|
|
f19 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << 1);
|
|
}
|
|
|
|
unsigned int
|
|
f20 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> 1) ^ (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f21 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned short int
|
|
f22 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned char
|
|
f23 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned char
|
|
f24 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned int
|
|
f25 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned int
|
|
f26 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned int
|
|
f27 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << 1);
|
|
}
|
|
|
|
unsigned int
|
|
f28 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> 1) ^ (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f29 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned short int
|
|
f30 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned char
|
|
f31 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned char
|
|
f32 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
|
|
}
|
|
|
|
unsigned int
|
|
f33 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f34 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f35 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> 1) | (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f36 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) | (x << 1);
|
|
}
|
|
|
|
unsigned short int
|
|
f37 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f38 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f39 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f40 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f41 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f42 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f43 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> 1) | (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f44 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) | (x << 1);
|
|
}
|
|
|
|
unsigned short int
|
|
f45 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f46 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f47 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f48 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f49 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f50 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f51 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> 1);
|
|
}
|
|
|
|
unsigned int
|
|
f52 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) ^ (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f53 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned short int
|
|
f54 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f55 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f56 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f57 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f58 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f59 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> 1);
|
|
}
|
|
|
|
unsigned int
|
|
f60 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) ^ (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f61 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned short int
|
|
f62 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f63 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f64 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f65 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f66 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f67 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f68 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> 1);
|
|
}
|
|
|
|
unsigned short int
|
|
f69 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f70 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f71 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f72 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f73 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f74 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f75 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f76 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> 1);
|
|
}
|
|
|
|
unsigned short int
|
|
f77 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f78 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f79 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
|
|
}
|
|
|
|
unsigned char
|
|
f80 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
|
|
}
|
|
|
|
unsigned int
|
|
f81 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f82 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f83 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> 1);
|
|
}
|
|
|
|
unsigned int
|
|
f84 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f85 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned short int
|
|
f86 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f87 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f88 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f89 (unsigned int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f90 (unsigned int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned int
|
|
f91 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> 1);
|
|
}
|
|
|
|
unsigned int
|
|
f92 (unsigned int x, int y __attribute__((unused)))
|
|
{
|
|
return (x << 1) + (x >> ((-1) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
|
|
}
|
|
|
|
unsigned short int
|
|
f93 (unsigned short int x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned short int
|
|
f94 (unsigned short int x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f95 (unsigned char x, unsigned int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
|
|
}
|
|
|
|
unsigned char
|
|
f96 (unsigned char x, unsigned long int y)
|
|
{
|
|
return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
|
|
}
|