/* { dg-do compile } */ #define N 128 short x[N]; short y[N]; void f1 (void) { for (int i = 0; i < N; ++i) x[i] >>= y[i]; } void f2 (void) { for (int i = 0; i < N; ++i) x[i] >>= (y[i] < 32 ? y[i] : 32); } void f3 (void) { for (int i = 0; i < N; ++i) x[i] >>= (y[i] < 31 ? y[i] : 31); } void f4 (void) { for (int i = 0; i < N; ++i) x[i] >>= (y[i] & 31); } void f5 (void) { for (int i = 0; i < N; ++i) x[i] >>= 0x8000 >> y[i]; } void f6 (void) { for (int i = 0; i < N; ++i) x[i] >>= 0x8000 >> (y[i] & 31); } /* { dg-final { scan-tree-dump-not {can narrow[^\n]+>>} "vect" } } */