1 /* PR target/84431 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2" } */
4 
5 #ifdef __SIZEOF_INT128__
6 typedef unsigned __int128 U;
7 typedef signed __int128 S;
8 # define M 63
9 #else
10 typedef unsigned long long U;
11 typedef signed long long S;
12 # define M 31
13 #endif
14 
f1(S a,int s)15 S f1 (S a, int s) { return a >> (s & M); }
f2(U a,int s)16 U f2 (U a, int s) { return a >> (s & M); }
f3(U a,int s)17 U f3 (U a, int s) { return a << (s & M); }
18 
19 /* { dg-final { scan-assembler-not "and" } } */
20