/* PR target/97249 */ /* { dg-do compile } */ /* { dg-options "-mavx2 -O3 -masm=att" } */ /* { dg-final { scan-assembler-times {(?n)vpmovzxbw[ \t]+\(.*%xmm[0-9]} 2 } } */ /* { dg-final { scan-assembler-times {(?n)vpmovzxwd[ \t]+\(.*%xmm[0-9]} 2 } } */ /* { dg-final { scan-assembler-times {(?n)vpmovzxdq[ \t]+\(.*%xmm[0-9]} 2 } } */ void foo (unsigned char* p1, unsigned char* p2, short* __restrict p3) { /* Avoid loop vectorization. */ #pragma GCC unroll 8 for (int i = 0 ; i != 8; i++) p3[i] = p1[i] + p2[i]; } void foo1 (unsigned short* p1, unsigned short* p2, int* __restrict p3) { /* Avoid loop vectorization. */ #pragma GCC unroll 4 for (int i = 0 ; i != 4; i++) p3[i] = p1[i] + p2[i]; } void foo2 (unsigned int* p1, unsigned int* p2, long long* __restrict p3) { /* Avoid loop vectorization. */ #pragma GCC unroll 2 for (int i = 0 ; i != 2; i++) p3[i] = (long long)p1[i] + (long long)p2[i]; }