/* Check rotate pattern detection.  */
/* { dg-do compile } */
/* { dg-options "-O2 -fno-ipa-icf -fdump-tree-optimized" } */
/* { dg-final { scan-tree-dump-times "r\[<>]\[<>]" 96 "optimized" } } */

unsigned int
f1 (unsigned int x, int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - y));
}

unsigned int
f2 (unsigned int x, long int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - y));
}

unsigned int
f3 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) | (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - 1));
}

unsigned int
f4 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - 1)) | (x >> 1);
}

unsigned short int
f5 (unsigned short int x, int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * __SIZEOF_SHORT__ - y));
}

unsigned short int
f6 (unsigned short int x, long int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * __SIZEOF_SHORT__ - y));
}

unsigned char
f7 (unsigned char x, int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ - y));
}

unsigned char
f8 (unsigned char x, long int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ - y));
}

unsigned int
f9 (unsigned int x, int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * sizeof (unsigned int) - y));
}

unsigned int
f10 (unsigned int x, long int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * sizeof (unsigned int) - y));
}

unsigned int
f11 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) | (x >> (__CHAR_BIT__ * sizeof (unsigned int) - 1));
}

unsigned int
f12 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - 1)) | (x >> 1);
}

unsigned short int
f13 (unsigned short int x, int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * sizeof (unsigned short) - y));
}

unsigned short int
f14 (unsigned short int x, long int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * sizeof (unsigned short) - y));
}

unsigned char
f15 (unsigned char x, int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * sizeof (unsigned char) - y));
}

unsigned char
f16 (unsigned char x, long int y)
{
  return (x << y) | (x >> (__CHAR_BIT__ * sizeof (unsigned char) - y));
}

unsigned int
f17 (unsigned int x, int y)
{
  return (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - y)) ^ (x << y);
}

unsigned int
f18 (unsigned int x, long int y)
{
  return (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - y)) ^ (x << y);
}

unsigned int
f19 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - 1)) ^ (x << 1);
}

unsigned int
f20 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> 1) ^ (x << (__CHAR_BIT__ * __SIZEOF_INT__ - 1));
}

unsigned short int
f21 (unsigned short int x, int y)
{
  return (x >> (__CHAR_BIT__ * __SIZEOF_SHORT__ - y)) ^ (x << y);
}

unsigned short int
f22 (unsigned short int x, long int y)
{
  return (x >> (__CHAR_BIT__ * __SIZEOF_SHORT__ - y)) ^ (x << y);
}

unsigned char
f23 (unsigned char x, int y)
{
  return (x >> (__CHAR_BIT__ - y)) ^ (x << y);
}

unsigned char
f24 (unsigned char x, long int y)
{
  return (x >> (__CHAR_BIT__ - y)) ^ (x << y);
}

unsigned int
f25 (unsigned int x, int y)
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned int) - y)) ^ (x << y);
}

unsigned int
f26 (unsigned int x, long int y)
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned int) - y)) ^ (x << y);
}

unsigned int
f27 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned int) - 1)) ^ (x << 1);
}

unsigned int
f28 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> 1) ^ (x << (__CHAR_BIT__ * sizeof (unsigned int) - 1));
}

unsigned short int
f29 (unsigned short int x, int y)
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned short) - y)) ^ (x << y);
}

unsigned short int
f30 (unsigned short int x, long int y)
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned short) - y)) ^ (x << y);
}

unsigned char
f31 (unsigned char x, int y)
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned char) - y)) ^ (x << y);
}

unsigned char
f32 (unsigned char x, long int y)
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned char) - y)) ^ (x << y);
}

unsigned int
f33 (unsigned int x, int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * __SIZEOF_INT__ - y));
}

unsigned int
f34 (unsigned int x, long int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * __SIZEOF_INT__ - y));
}

unsigned int
f35 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> 1) | (x << (__CHAR_BIT__ * __SIZEOF_INT__ - 1));
}

unsigned int
f36 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - 1)) | (x << 1);
}

unsigned short int
f37 (unsigned short int x, int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * __SIZEOF_SHORT__ - y));
}

unsigned short int
f38 (unsigned short int x, long int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * __SIZEOF_SHORT__ - y));
}

unsigned char
f39 (unsigned char x, int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ - y));
}

unsigned char
f40 (unsigned char x, long int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ - y));
}

unsigned int
f41 (unsigned int x, int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * sizeof (unsigned int) - y));
}

unsigned int
f42 (unsigned int x, long int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * sizeof (unsigned int) - y));
}

unsigned int
f43 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> 1) | (x << (__CHAR_BIT__ * sizeof (unsigned int) - 1));
}

unsigned int
f44 (unsigned int x, int y __attribute__((unused)))
{
  return (x >> (__CHAR_BIT__ * sizeof (unsigned int) - 1)) | (x << 1);
}

unsigned short int
f45 (unsigned short int x, int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * sizeof (unsigned short) - y));
}

unsigned short int
f46 (unsigned short int x, long int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * sizeof (unsigned short) - y));
}

unsigned char
f47 (unsigned char x, int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * sizeof (unsigned char) - y));
}

unsigned char
f48 (unsigned char x, long int y)
{
  return (x >> y) | (x << (__CHAR_BIT__ * sizeof (unsigned char) - y));
}

unsigned int
f49 (unsigned int x, int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - y)) ^ (x >> y);
}

unsigned int
f50 (unsigned int x, long int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - y)) ^ (x >> y);
}

unsigned int
f51 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - 1)) ^ (x >> 1);
}

unsigned int
f52 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) ^ (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - 1));
}

unsigned short int
f53 (unsigned short int x, int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_SHORT__ - y)) ^ (x >> y);
}

unsigned short int
f54 (unsigned short int x, long int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_SHORT__ - y)) ^ (x >> y);
}

unsigned char
f55 (unsigned char x, int y)
{
  return (x << (__CHAR_BIT__ - y)) ^ (x >> y);
}

unsigned char
f56 (unsigned char x, long int y)
{
  return (x << (__CHAR_BIT__ - y)) ^ (x >> y);
}

unsigned int
f57 (unsigned int x, int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - y)) ^ (x >> y);
}

unsigned int
f58 (unsigned int x, long int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - y)) ^ (x >> y);
}

unsigned int
f59 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - 1)) ^ (x >> 1);
}

unsigned int
f60 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) ^ (x >> (__CHAR_BIT__ * sizeof (unsigned int) - 1));
}

unsigned short int
f61 (unsigned short int x, int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned short) - y)) ^ (x >> y);
}

unsigned short int
f62 (unsigned short int x, long int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned short) - y)) ^ (x >> y);
}

unsigned char
f63 (unsigned char x, int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned char) - y)) ^ (x >> y);
}

unsigned char
f64 (unsigned char x, long int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned char) - y)) ^ (x >> y);
}

unsigned int
f65 (unsigned int x, int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - y));
}

unsigned int
f66 (unsigned int x, long int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - y));
}

unsigned int
f67 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) + (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - 1));
}

unsigned int
f68 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - 1)) + (x >> 1);
}

unsigned short int
f69 (unsigned short int x, int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * __SIZEOF_SHORT__ - y));
}

unsigned short int
f70 (unsigned short int x, long int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * __SIZEOF_SHORT__ - y));
}

unsigned char
f71 (unsigned char x, int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ - y));
}

unsigned char
f72 (unsigned char x, long int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ - y));
}

unsigned int
f73 (unsigned int x, int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * sizeof (unsigned int) - y));
}

unsigned int
f74 (unsigned int x, long int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * sizeof (unsigned int) - y));
}

unsigned int
f75 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) + (x >> (__CHAR_BIT__ * sizeof (unsigned int) - 1));
}

unsigned int
f76 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - 1)) + (x >> 1);
}

unsigned short int
f77 (unsigned short int x, int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * sizeof (unsigned short) - y));
}

unsigned short int
f78 (unsigned short int x, long int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * sizeof (unsigned short) - y));
}

unsigned char
f79 (unsigned char x, int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * sizeof (unsigned char) - y));
}

unsigned char
f80 (unsigned char x, long int y)
{
  return (x << y) + (x >> (__CHAR_BIT__ * sizeof (unsigned char) - y));
}

unsigned int
f81 (unsigned int x, int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - y)) + (x >> y);
}

unsigned int
f82 (unsigned int x, long int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - y)) + (x >> y);
}

unsigned int
f83 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * __SIZEOF_INT__ - 1)) + (x >> 1);
}

unsigned int
f84 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) + (x >> (__CHAR_BIT__ * __SIZEOF_INT__ - 1));
}

unsigned short int
f85 (unsigned short int x, int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_SHORT__ - y)) + (x >> y);
}

unsigned short int
f86 (unsigned short int x, long int y)
{
  return (x << (__CHAR_BIT__ * __SIZEOF_SHORT__ - y)) + (x >> y);
}

unsigned char
f87 (unsigned char x, int y)
{
  return (x << (__CHAR_BIT__ - y)) + (x >> y);
}

unsigned char
f88 (unsigned char x, long int y)
{
  return (x << (__CHAR_BIT__ - y)) + (x >> y);
}

unsigned int
f89 (unsigned int x, int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - y)) + (x >> y);
}

unsigned int
f90 (unsigned int x, long int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - y)) + (x >> y);
}

unsigned int
f91 (unsigned int x, int y __attribute__((unused)))
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned int) - 1)) + (x >> 1);
}

unsigned int
f92 (unsigned int x, int y __attribute__((unused)))
{
  return (x << 1) + (x >> (__CHAR_BIT__ * sizeof (unsigned int) - 1));
}

unsigned short int
f93 (unsigned short int x, int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned short) - y)) + (x >> y);
}

unsigned short int
f94 (unsigned short int x, long int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned short) - y)) + (x >> y);
}

unsigned char
f95 (unsigned char x, int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned char) - y)) + (x >> y);
}

unsigned char
f96 (unsigned char x, long int y)
{
  return (x << (__CHAR_BIT__ * sizeof (unsigned char) - y)) + (x >> y);
}
