19948Sakulyakh/* Test that the compiler properly optimizes vector rotate instructions vector 29948Sakulyakh into prot on XOP systems. */ 39948Sakulyakh 49948Sakulyakh/* { dg-do compile } */ 59948Sakulyakh/* { dg-require-effective-target lp64 } */ 69948Sakulyakh/* { dg-options "-O2 -mxop -ftree-vectorize" } */ 79948Sakulyakh 89948Sakulyakhextern void exit (int); 99948Sakulyakh 109948Sakulyakhtypedef long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); 119948Sakulyakh 129948Sakulyakh#define SIZE 10240 139948Sakulyakh 149948Sakulyakhunion { 159948Sakulyakh __m128i i_align; 169948Sakulyakh unsigned u32[SIZE]; 179948Sakulyakh} a, b, c; 189948Sakulyakh 199948Sakulyakhvoid 209948Sakulyakhright_rotate32_b (void) 219948Sakulyakh{ 229948Sakulyakh int i; 239948Sakulyakh 249948Sakulyakh for (i = 0; i < SIZE; i++) 259948Sakulyakh a.u32[i] = (b.u32[i] >> ((sizeof (int) * 8) - 4)) | (b.u32[i] << 4); 269948Sakulyakh} 279948Sakulyakh 289948Sakulyakhint 299948Sakulyakhmain () 309948Sakulyakh{ 319948Sakulyakh right_rotate (); 329948Sakulyakh exit (0); 339948Sakulyakh} 349948Sakulyakh 359948Sakulyakh/* { dg-final { scan-assembler "vprot" } } */ 369948Sakulyakh