(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
vect-pr67800.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -msse4.2" } */
       3  
       4  #define ubyte unsigned char
       5  #define byte char
       6  
       7  #define SCALE 8
       8  
       9  #define R2Y (76)
      10  #define G2Y (150)
      11  #define B2Y (30)
      12  #define R2I (127)
      13  #define G2I (-59)
      14  #define B2I (-68)
      15  #define R2Q (51)
      16  #define G2Q (-127)
      17  #define B2Q (76)
      18  
      19  void
      20  convert(ubyte *in, ubyte *out, unsigned n)
      21  {
      22    ubyte r, g, b;
      23    ubyte y = 0;
      24    byte i, q;
      25  
      26    while (--n) {
      27  	  r = *in++;
      28  	  g = *in++;
      29  	  b = *in++;
      30  
      31        y = (ubyte)(((R2Y * r) + (G2Y * g) + (B2Y * b) + (1 << (SCALE - 1))) >> SCALE);
      32        i = (byte)(((R2I * r) + (G2I * g) + (B2I * b) + (1 << (SCALE - 1))) >> SCALE);
      33        q = (byte)(((R2Q * r) + (G2Q * g) + (B2Q * b) + (1 << (SCALE - 1))) >> SCALE);
      34  
      35        *out++ = y;
      36  	  *out++ = i;
      37  	  *out++ = q;
      38    }
      39  }
      40  
      41  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */