1/* { dg-do compile } */ 2/* { dg-require-effective-target vect_int } */ 3/* { dg-require-effective-target vect_shift } */ 4 5#define N 32 6 7/* All the loops are vectorizable on platforms with vector shift argument. */ 8 9void 10test_1 (void) 11{ 12 static unsigned int bm[N]; 13 static unsigned int cm[N]; 14 int j; 15 16 /* Vectorizable on platforms with scalar shift argument. */ 17 for (j = 0; j < N/2; j++) 18 { 19 bm[2*j] <<= 8; 20 bm[2*j+1] <<= 8; 21 } 22 23 /* Not vectorizable on platforms with scalar shift argument. */ 24 for (j = 0; j < N/2; j++) 25 { 26 cm[2*j] <<= 8; 27 cm[2*j+1] <<= 7; 28 } 29} 30 31void 32test_2 (int a, int b) 33{ 34 static unsigned int bm[N]; 35 static unsigned int cm[N]; 36 int j; 37 38 /* Vectorizable on platforms with scalar shift argument. */ 39 for (j = 0; j < N/2; j++) 40 { 41 bm[2*j] <<= a; 42 bm[2*j+1] <<= a; 43 } 44 45 /* Not vectorizable on platforms with scalar shift argument. */ 46 for (j = 0; j < N/2; j++) 47 { 48 cm[2*j] <<= a; 49 cm[2*j+1] <<= b; 50 } 51} 52 53void 54test_3 (void) 55{ 56 static unsigned int bm[N]; 57 int am[N]; 58 int j; 59 60 /* Not vectorizable on platforms with scalar shift argument. */ 61 for (j = 0; j < N/2; j++) 62 { 63 bm[2*j] <<= am[j]; 64 bm[2*j+1] <<= am[j]; 65 } 66 67 /* Not vectorizable on platforms with scalar shift argument. */ 68 for (j = 0; j < N/2; j++) 69 { 70 bm[2*j] <<= am[2*j]; 71 bm[2*j+1] <<= am[2*j+1]; 72 } 73 74} 75 76/* { dg-final { cleanup-tree-dump "vect" } } */ 77