text: /* 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, int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
  }
  
  unsigned int
  f2 (unsigned int x, 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, int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
  }
  
  unsigned short int
  f6 (unsigned short int x, long int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
  }
  
  unsigned char
  f7 (unsigned char x, int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
  }
  
  unsigned char
  f8 (unsigned char x, long int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
  }
  
  unsigned int
  f9 (unsigned int x, int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
  }
  
  unsigned int
  f10 (unsigned int x, 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, int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
  }
  
  unsigned short int
  f14 (unsigned short int x, long int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
  }
  
  unsigned char
  f15 (unsigned char x, int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
  }
  
  unsigned char
  f16 (unsigned char x, long int y)
  {
    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
  }
  
  unsigned int
  f17 (unsigned int x, int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x << y);
  }
  
  unsigned int
  f18 (unsigned int x, 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, int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
  }
  
  unsigned short int
  f22 (unsigned short int x, long int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x << y);
  }
  
  unsigned char
  f23 (unsigned char x, int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
  }
  
  unsigned char
  f24 (unsigned char x, long int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ - 1))) ^ (x << y);
  }
  
  unsigned int
  f25 (unsigned int x, int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x << y);
  }
  
  unsigned int
  f26 (unsigned int x, 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, int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
  }
  
  unsigned short int
  f30 (unsigned short int x, long int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x << y);
  }
  
  unsigned char
  f31 (unsigned char x, int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
  }
  
  unsigned char
  f32 (unsigned char x, long int y)
  {
    return (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x << y);
  }
  
  unsigned int
  f33 (unsigned int x, int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
  }
  
  unsigned int
  f34 (unsigned int x, 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, int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
  }
  
  unsigned short int
  f38 (unsigned short int x, long int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
  }
  
  unsigned char
  f39 (unsigned char x, int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
  }
  
  unsigned char
  f40 (unsigned char x, long int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ - 1)));
  }
  
  unsigned int
  f41 (unsigned int x, int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
  }
  
  unsigned int
  f42 (unsigned int x, 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, int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
  }
  
  unsigned short int
  f46 (unsigned short int x, long int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
  }
  
  unsigned char
  f47 (unsigned char x, int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
  }
  
  unsigned char
  f48 (unsigned char x, long int y)
  {
    return (x >> y) | (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
  }
  
  unsigned int
  f49 (unsigned int x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) ^ (x >> y);
  }
  
  unsigned int
  f50 (unsigned int x, 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, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
  }
  
  unsigned short int
  f54 (unsigned short int x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) ^ (x >> y);
  }
  
  unsigned char
  f55 (unsigned char x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
  }
  
  unsigned char
  f56 (unsigned char x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ - 1))) ^ (x >> y);
  }
  
  unsigned int
  f57 (unsigned int x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) ^ (x >> y);
  }
  
  unsigned int
  f58 (unsigned int x, 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, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
  }
  
  unsigned short int
  f62 (unsigned short int x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) ^ (x >> y);
  }
  
  unsigned char
  f63 (unsigned char x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
  }
  
  unsigned char
  f64 (unsigned char x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) ^ (x >> y);
  }
  
  unsigned int
  f65 (unsigned int x, int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1)));
  }
  
  unsigned int
  f66 (unsigned int x, 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, int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
  }
  
  unsigned short int
  f70 (unsigned short int x, long int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1)));
  }
  
  unsigned char
  f71 (unsigned char x, int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
  }
  
  unsigned char
  f72 (unsigned char x, long int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ - 1)));
  }
  
  unsigned int
  f73 (unsigned int x, int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1)));
  }
  
  unsigned int
  f74 (unsigned int x, 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, int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
  }
  
  unsigned short int
  f78 (unsigned short int x, long int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1)));
  }
  
  unsigned char
  f79 (unsigned char x, int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
  }
  
  unsigned char
  f80 (unsigned char x, long int y)
  {
    return (x << y) + (x >> ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1)));
  }
  
  unsigned int
  f81 (unsigned int x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_INT__ - 1))) + (x >> y);
  }
  
  unsigned int
  f82 (unsigned int x, 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, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
  }
  
  unsigned short int
  f86 (unsigned short int x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * __SIZEOF_SHORT__ - 1))) + (x >> y);
  }
  
  unsigned char
  f87 (unsigned char x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
  }
  
  unsigned char
  f88 (unsigned char x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ - 1))) + (x >> y);
  }
  
  unsigned int
  f89 (unsigned int x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned int) - 1))) + (x >> y);
  }
  
  unsigned int
  f90 (unsigned int x, 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, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
  }
  
  unsigned short int
  f94 (unsigned short int x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned short) - 1))) + (x >> y);
  }
  
  unsigned char
  f95 (unsigned char x, int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
  }
  
  unsigned char
  f96 (unsigned char x, long int y)
  {
    return (x << ((-y) & (__CHAR_BIT__ * sizeof (unsigned char) - 1))) + (x >> y);
  }
  