(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
pr99856.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target vect_int } */
       3  /* { dg-require-effective-target vect_unpack } */
       4  /* { dg-require-effective-target vect_pack_trunc } */
       5  
       6  #define SHIFTFORDIV255(a)\
       7      ((((a) >> 8) + a) >> 8)
       8  
       9  #define DIV255(a)\
      10      SHIFTFORDIV255(a + 0x80)
      11  
      12  typedef unsigned char uint8_t;
      13  
      14  void
      15  opSourceOver_premul(uint8_t* restrict Rrgba,
      16                      const uint8_t* restrict Srgba,
      17                      const uint8_t* restrict Drgba, int len)
      18  {
      19    Rrgba = __builtin_assume_aligned (Rrgba, __BIGGEST_ALIGNMENT__);
      20    Srgba = __builtin_assume_aligned (Rrgba, __BIGGEST_ALIGNMENT__);
      21    Drgba = __builtin_assume_aligned (Rrgba, __BIGGEST_ALIGNMENT__);
      22    int i = 0;
      23    for (; i < len*4; i += 4)
      24      {
      25        uint8_t Sa = Srgba[i + 3];
      26        Rrgba[i + 0] = DIV255(Srgba[i + 0] * 255 + Drgba[i + 0] * (255 - Sa));
      27        Rrgba[i + 1] = DIV255(Srgba[i + 1] * 255 + Drgba[i + 1] * (255 - Sa));
      28        Rrgba[i + 2] = DIV255(Srgba[i + 2] * 255 + Drgba[i + 2] * (255 - Sa));
      29        Rrgba[i + 3] = DIV255(Srgba[i + 3] * 255 + Drgba[i + 3] * (255 - Sa));
      30      }
      31  }
      32  
      33  /* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */