(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr107304.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O0 -march=tigerlake" } */
       3  /* { dg-require-ifunc "" } */
       4  
       5  #include <stdint.h>
       6  
       7  typedef union {
       8    uint8_t v __attribute__((aligned(256))) __attribute__ ((vector_size(64 * sizeof(uint8_t))));
       9    uint8_t i[64] __attribute__((aligned(256)));
      10  } stress_vec_u8_64_t;
      11  
      12  typedef struct {
      13   struct {
      14    stress_vec_u8_64_t s;
      15    stress_vec_u8_64_t o;
      16    stress_vec_u8_64_t mask1;
      17    stress_vec_u8_64_t mask2;
      18   } u8_64;
      19  } stress_vec_data_t;
      20  
      21  __attribute__((target_clones("arch=alderlake", "default"))) 
      22  void
      23  stress_vecshuf_u8_64(stress_vec_data_t *data)
      24  {
      25    stress_vec_u8_64_t *__restrict s;
      26    stress_vec_u8_64_t *__restrict mask1;
      27    stress_vec_u8_64_t *__restrict mask2;
      28    register int i;
      29  
      30    s = &data->u8_64.s;
      31    mask1 = &data->u8_64.mask1;
      32    mask2 = &data->u8_64.mask2;
      33  
      34    for (i = 0; i < 256; i++) {	/* was i < 65536 */
      35        stress_vec_u8_64_t tmp;
      36  
      37        tmp.v = __builtin_shuffle(s->v, mask1->v);
      38        s->v = __builtin_shuffle(tmp.v, mask2->v);
      39    }
      40  }