1/* Test that the compiler properly optimizes vector shift instructions into 2 psha/pshl 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 int i32[SIZE]; 16 unsigned u32[SIZE]; 17} a, b, c; 18 19void 20left_shift32 (void) 21{ 22 int i; 23 24 for (i = 0; i < SIZE; i++) 25 a.i32[i] = b.i32[i] << c.i32[i]; 26} 27 28int main () 29{ 30 left_shift32 (); 31 exit (0); 32} 33 34/* { dg-final { scan-assembler "vpshad" } } */ 35