2017-11-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / vshift-7.c
blob27321209deafc1f7a51f8249c64cde88c4543e8e
1 /* { dg-do compile } */
2 /* { dg-options "-O1 -Wshift-count-negative -Wshift-count-overflow" } */
4 typedef unsigned int v1qi_t __attribute__((mode(QI), vector_size(1)));
5 typedef unsigned int v1hi_t __attribute__((mode(HI), vector_size(2)));
6 typedef unsigned int v1si_t __attribute__((mode(SI), vector_size(4)));
8 static const signed shift_neg = -1;
9 static const unsigned shift_qi = 8;
10 static const unsigned shift_hi = 16;
11 static const unsigned shift_si = 32;
13 v1qi_t test1qi(v1qi_t x, int c) {
14 switch(c) {
15 case 0: return x << shift_neg; /* { dg-warning "shift count is negative" } */
16 case 1: return x << (shift_qi - 1);
17 case 2: return x << shift_qi; /* { dg-warning "shift count >= width" } */
18 case ~0: return x >> shift_neg; /* { dg-warning "shift count is negative" } */
19 case ~1: return x >> (shift_qi - 1);
20 case ~2: return x >> shift_qi; /* { dg-warning "shift count >= width" } */
22 return c < 0 ? x >> -c : x << c;
25 v1hi_t test1hi(v1hi_t x, int c) {
26 switch(c) {
27 case 0: return x << shift_neg; /* { dg-warning "shift count is negative" } */
28 case 1: return x << (shift_hi - 1);
29 case 2: return x << shift_hi; /* { dg-warning "shift count >= width" } */
30 case ~0: return x >> shift_neg; /* { dg-warning "shift count is negative" } */
31 case ~1: return x >> (shift_hi - 1);
32 case ~2: return x >> shift_hi; /* { dg-warning "shift count >= width" } */
34 return c < 0 ? x >> -c : x << c;
37 v1si_t test1si(v1si_t x, int c) {
38 switch(c) {
39 case 0: return x << shift_neg; /* { dg-warning "shift count is negative" } */
40 case 1: return x << (shift_si - 1);
41 case 2: return x << shift_si; /* { dg-warning "shift count >= width" } */
42 case ~0: return x >> shift_neg; /* { dg-warning "shift count is negative" } */
43 case ~1: return x >> (shift_si - 1);
44 case ~2: return x >> shift_si; /* { dg-warning "shift count >= width" } */
46 return c < 0 ? x >> -c : x << c;