(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
rotate-11.c
       1  /* PR tree-optimization/108440 */
       2  /* { dg-do compile { target { { ilp32 || lp64 } || llp64 } } } */
       3  /* { dg-options "-O2 -fdump-tree-optimized" } */
       4  /* { dg-final { scan-tree-dump-times " r<< " 5 "optimized" } } */
       5  /* { dg-final { scan-tree-dump-times " \\\& 7;" 4 "optimized" } } */
       6  
       7  unsigned char
       8  foo (unsigned char x, unsigned int y)
       9  {
      10    if (y > __CHAR_BIT__)
      11      return 42;
      12    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
      13  }
      14  
      15  unsigned char
      16  bar (unsigned char x, unsigned int y)
      17  {
      18    if (y >= __CHAR_BIT__)
      19      return 42;
      20    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
      21  }
      22  
      23  unsigned char
      24  baz (unsigned char x, unsigned int y)
      25  {
      26    if (y > __CHAR_BIT__ && y != 2 * __CHAR_BIT__)
      27      return 42;
      28    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
      29  }
      30  
      31  unsigned char
      32  qux (unsigned char x, unsigned int y)
      33  {
      34    if (y > __CHAR_BIT__ && y != 2 * __CHAR_BIT__ && y != __CHAR_BIT__ + 2)
      35      return 42;
      36    return (x << y) | (x >> ((-y) & (__CHAR_BIT__ - 1)));
      37  }
      38  
      39  unsigned char
      40  quux (unsigned char x, unsigned int y)
      41  {
      42    if (y > __CHAR_BIT__)
      43      return 42;
      44    return (x << y) | (x >> (__CHAR_BIT__ - y));
      45  }
      46  
      47  unsigned char
      48  corge (unsigned char x, unsigned int y)
      49  {
      50    if (y >= __CHAR_BIT__)
      51      return 42;
      52    return (x << y) | (x >> (__CHAR_BIT__ - y));
      53  }