/* PR target/105778 */ /* { dg-do compile } */ /* { dg-options "-O2" } */ /* { dg-final { scan-assembler-not "\tand\[^\n\r]*\(31\|63\|127\|255\)" } } */ unsigned int f1 (unsigned int x, unsigned long y) { y &= 31; return x << y; } unsigned int f2 (unsigned int x, unsigned long y) { return x << (y & 31); } unsigned int f3 (unsigned int x, unsigned long y) { y &= 31; return x >> y; } unsigned int f4 (unsigned int x, unsigned long y) { return x >> (y & 31); } int f5 (int x, unsigned long y) { y &= 31; return x >> y; } int f6 (int x, unsigned long y) { return x >> (y & 31); } unsigned long long f7 (unsigned long long x, unsigned long y) { y &= 63; return x << y; } unsigned long long f8 (unsigned long long x, unsigned long y) { return x << (y & 63); } unsigned long long f9 (unsigned long long x, unsigned long y) { y &= 63; return x >> y; } unsigned long long f10 (unsigned long long x, unsigned long y) { return x >> (y & 63); } long long f11 (long long x, unsigned long y) { y &= 63; return x >> y; } long long f12 (long long x, unsigned long y) { return x >> (y & 63); } #ifdef __SIZEOF_INT128__ unsigned __int128 f13 (unsigned __int128 x, unsigned long y) { y &= 127; return x << y; } unsigned __int128 f14 (unsigned __int128 x, unsigned long y) { return x << (y & 127); } unsigned __int128 f15 (unsigned __int128 x, unsigned long y) { y &= 127; return x >> y; } unsigned __int128 f16 (unsigned __int128 x, unsigned long y) { return x >> (y & 127); } __int128 f17 (__int128 x, unsigned long y) { y &= 127; return x >> y; } __int128 f18 (__int128 x, unsigned long y) { return x >> (y & 127); } #endif unsigned int f19 (unsigned int x, unsigned long y) { y &= 63; return x << y; } unsigned int f20 (unsigned int x, unsigned long y) { return x << (y & 63); } unsigned int f21 (unsigned int x, unsigned long y) { y &= 63; return x >> y; } unsigned int f22 (unsigned int x, unsigned long y) { return x >> (y & 63); } int f23 (int x, unsigned long y) { y &= 63; return x >> y; } int f24 (int x, unsigned long y) { return x >> (y & 63); } unsigned long long f25 (unsigned long long x, unsigned long y) { y &= 127; return x << y; } unsigned long long f26 (unsigned long long x, unsigned long y) { return x << (y & 127); } unsigned long long f27 (unsigned long long x, unsigned long y) { y &= 127; return x >> y; } unsigned long long f28 (unsigned long long x, unsigned long y) { return x >> (y & 127); } long long f29 (long long x, unsigned long y) { y &= 127; return x >> y; } long long f30 (long long x, unsigned long y) { return x >> (y & 127); } #ifdef __SIZEOF_INT128__ unsigned __int128 f31 (unsigned __int128 x, unsigned long y) { y &= 255; return x << y; } unsigned __int128 f32 (unsigned __int128 x, unsigned long y) { return x << (y & 255); } unsigned __int128 f33 (unsigned __int128 x, unsigned long y) { y &= 255; return x >> y; } unsigned __int128 f34 (unsigned __int128 x, unsigned long y) { return x >> (y & 255); } __int128 f35 (__int128 x, unsigned long y) { y &= 255; return x >> y; } __int128 f36 (__int128 x, unsigned long y) { return x >> (y & 255); } #endif