/* { dg-do compile } */ /* { dg-options "-ftree-vectorize" } */ struct Pixel { unsigned short r; unsigned short g; unsigned short b; unsigned short a; }; void fn(unsigned char * __restrict dst, const unsigned char * __restrict src) { unsigned x; for(x = 0; x < 1024; x += 1) { struct Pixel pixel; pixel.r = (unsigned short)(((unsigned)src[0]) * 0xffff / 0xff); pixel.g = (unsigned short)(((unsigned)src[1]) * 0xffff / 0xff); pixel.b = (unsigned short)(((unsigned)src[2]) * 0xffff / 0xff); pixel.a = (unsigned short)(((unsigned)src[3]) * 0xffff / 0xff); __builtin_memcpy(dst, &pixel, sizeof pixel); src += 4; dst += 8; } }