Use gather loads for strided accesses
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / vect-pr67800.c
blob324510858ff10ec6b3bdde3f6d0d4269847def0a
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details" } */
3 /* { dg-additional-options "-msse4.2" } */
5 #define ubyte unsigned char
6 #define byte char
8 #define SCALE 8
10 #define R2Y (76)
11 #define G2Y (150)
12 #define B2Y (30)
13 #define R2I (127)
14 #define G2I (-59)
15 #define B2I (-68)
16 #define R2Q (51)
17 #define G2Q (-127)
18 #define B2Q (76)
20 void
21 convert(ubyte *in, ubyte *out, unsigned n)
23 ubyte r, g, b;
24 ubyte y = 0;
25 byte i, q;
27 while (--n) {
28 r = *in++;
29 g = *in++;
30 b = *in++;
32 y = (ubyte)(((R2Y * r) + (G2Y * g) + (B2Y * b) + (1 << (SCALE - 1))) >> SCALE);
33 i = (byte)(((R2I * r) + (G2I * g) + (B2I * b) + (1 << (SCALE - 1))) >> SCALE);
34 q = (byte)(((R2Q * r) + (G2Q * g) + (B2Q * b) + (1 << (SCALE - 1))) >> SCALE);
36 *out++ = y;
37 *out++ = i;
38 *out++ = q;
42 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */