(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr105778.c
       1  /* PR target/105778 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2" } */
       4  /* { dg-final { scan-assembler-not "\tand\[^\n\r]*\(31\|63\|127\|255\)" } } */
       5  
       6  unsigned int f1 (unsigned int x, unsigned long y) { y &= 31; return x << y; }
       7  unsigned int f2 (unsigned int x, unsigned long y) { return x << (y & 31); }
       8  unsigned int f3 (unsigned int x, unsigned long y) { y &= 31; return x >> y; }
       9  unsigned int f4 (unsigned int x, unsigned long y) { return x >> (y & 31); }
      10  int f5 (int x, unsigned long y) { y &= 31; return x >> y; }
      11  int f6 (int x, unsigned long y) { return x >> (y & 31); }
      12  unsigned long long f7 (unsigned long long x, unsigned long y) { y &= 63; return x << y; }
      13  unsigned long long f8 (unsigned long long x, unsigned long y) { return x << (y & 63); }
      14  unsigned long long f9 (unsigned long long x, unsigned long y) { y &= 63; return x >> y; }
      15  unsigned long long f10 (unsigned long long x, unsigned long y) { return x >> (y & 63); }
      16  long long f11 (long long x, unsigned long y) { y &= 63; return x >> y; }
      17  long long f12 (long long x, unsigned long y) { return x >> (y & 63); }
      18  #ifdef __SIZEOF_INT128__
      19  unsigned __int128 f13 (unsigned __int128 x, unsigned long y) { y &= 127; return x << y; }
      20  unsigned __int128 f14 (unsigned __int128 x, unsigned long y) { return x << (y & 127); }
      21  unsigned __int128 f15 (unsigned __int128 x, unsigned long y) { y &= 127; return x >> y; }
      22  unsigned __int128 f16 (unsigned __int128 x, unsigned long y) { return x >> (y & 127); }
      23  __int128 f17 (__int128 x, unsigned long y) { y &= 127; return x >> y; }
      24  __int128 f18 (__int128 x, unsigned long y) { return x >> (y & 127); }
      25  #endif
      26  unsigned int f19 (unsigned int x, unsigned long y) { y &= 63; return x << y; }
      27  unsigned int f20 (unsigned int x, unsigned long y) { return x << (y & 63); }
      28  unsigned int f21 (unsigned int x, unsigned long y) { y &= 63; return x >> y; }
      29  unsigned int f22 (unsigned int x, unsigned long y) { return x >> (y & 63); }
      30  int f23 (int x, unsigned long y) { y &= 63; return x >> y; }
      31  int f24 (int x, unsigned long y) { return x >> (y & 63); }
      32  unsigned long long f25 (unsigned long long x, unsigned long y) { y &= 127; return x << y; }
      33  unsigned long long f26 (unsigned long long x, unsigned long y) { return x << (y & 127); }
      34  unsigned long long f27 (unsigned long long x, unsigned long y) { y &= 127; return x >> y; }
      35  unsigned long long f28 (unsigned long long x, unsigned long y) { return x >> (y & 127); }
      36  long long f29 (long long x, unsigned long y) { y &= 127; return x >> y; }
      37  long long f30 (long long x, unsigned long y) { return x >> (y & 127); }
      38  #ifdef __SIZEOF_INT128__
      39  unsigned __int128 f31 (unsigned __int128 x, unsigned long y) { y &= 255; return x << y; }
      40  unsigned __int128 f32 (unsigned __int128 x, unsigned long y) { return x << (y & 255); }
      41  unsigned __int128 f33 (unsigned __int128 x, unsigned long y) { y &= 255; return x >> y; }
      42  unsigned __int128 f34 (unsigned __int128 x, unsigned long y) { return x >> (y & 255); }
      43  __int128 f35 (__int128 x, unsigned long y) { y &= 255; return x >> y; }
      44  __int128 f36 (__int128 x, unsigned long y) { return x >> (y & 255); }
      45  #endif