1/* Test that the compiler properly optimizes vector rotate instructions vector 2 into prot on XOP systems. */ 3 4/* { dg-do compile { target { ! { ia32 } } } } */ 5/* { dg-options "-O2 -mxop -mno-avx2 -ftree-vectorize" } */ 6 7extern void exit (int); 8 9typedef long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); 10 11#define SIZE 10240 12 13union { 14 __m128i i_align; 15 unsigned u32[SIZE]; 16} a, b, c; 17 18void 19left_rotate32 (void) 20{ 21 int i; 22 23 for (i = 0; i < SIZE; i++) 24 a.u32[i] = (b.u32[i] << ((sizeof (int) * 8) - 4)) | (b.u32[i] >> 4); 25} 26 27int 28main () 29{ 30 left_rotate32 (); 31 exit (0); 32} 33 34/* { dg-final { scan-assembler "vprotd" } } */ 35