1  /* { dg-do compile } */
       2  /* { dg-options "-mavx512bw -mavx512vl -O2 -mprefer-vector-width=512" } */
       3  /* { dg-final { scan-assembler-times {vpsravw[\t ]*%xmm} 2 { target { ! ia32 } } } } */
       4  /* { dg-final { scan-assembler-times {vpsrlvw[\t ]*%ymm} 2 } } */
       5  /* { dg-final { scan-assembler-times {vpsllvw[\t ]*%zmm} 2 } } */
       6  /* { dg-final { scan-assembler-times {vpsllvq[\t ]*%xmm} 1 } } */
       7  /* { dg-final { scan-assembler-times {vpsravq[\t ]*%ymm} 1 } } */
       8  /* { dg-final { scan-assembler-times {vpsrlvq[\t ]*%zmm} 1 } } */
       9  
      10  int n;
      11  
      12  typedef char v8qi __attribute__((vector_size (8)));
      13  typedef char v16qi __attribute__((vector_size (16)));
      14  typedef char v32qi __attribute__((vector_size (32)));
      15  typedef short v8hi __attribute__((vector_size (16)));
      16  typedef short v16hi __attribute__((vector_size (32)));
      17  typedef short v32hi __attribute__((vector_size (64)));
      18  typedef long long v2di __attribute__((vector_size (16)));
      19  typedef long long v4di __attribute__((vector_size (32)));
      20  typedef long long v8di __attribute__((vector_size (64)));
      21  typedef unsigned char v8uqi __attribute__((vector_size (8)));
      22  typedef unsigned char v16uqi __attribute__((vector_size (16)));
      23  typedef unsigned char v32uqi __attribute__((vector_size (32)));
      24  typedef unsigned short v8uhi __attribute__((vector_size (16)));
      25  typedef unsigned short v16uhi __attribute__((vector_size (32)));
      26  typedef unsigned short v32uhi __attribute__((vector_size (64)));
      27  typedef unsigned long long v2udi __attribute__((vector_size (16)));
      28  typedef unsigned long long v4udi __attribute__((vector_size (32)));
      29  typedef unsigned long long v8udi __attribute__((vector_size (64)));
      30  
      31  #define FOO(TYPE, OP, NAME)		\
      32    __attribute__((noipa)) TYPE		\
      33    foo_##TYPE##_##NAME (TYPE a, TYPE b)	\
      34    {					\
      35      return a OP b;			\
      36    }					\
      37  
      38  FOO (v8qi, <<, vashl);
      39  FOO (v8qi, >>, vashr);
      40  FOO (v8uqi, >>, vlshr);
      41  FOO (v16qi, <<, vashl);
      42  FOO (v16qi, >>, vashr);
      43  FOO (v16uqi, >>, vlshr);
      44  FOO (v32qi, <<, vashl);
      45  FOO (v32qi, >>, vashr);
      46  FOO (v32uqi, >>, vlshr);
      47  FOO (v8hi, <<, vashl);
      48  FOO (v8hi, >>, vashr);
      49  FOO (v8uhi, >>, vlshr);
      50  FOO (v16hi, <<, vashl);
      51  FOO (v16hi, >>, vashr);
      52  FOO (v16uhi, >>, vlshr);
      53  FOO (v32hi, <<, vashl);
      54  FOO (v32hi, >>, vashr);
      55  FOO (v32uhi, >>, vlshr);
      56  FOO (v2di, <<, vashl);
      57  FOO (v2di, >>, vashr);
      58  FOO (v2udi, >>, vlshr);
      59  FOO (v4di, <<, vashl);
      60  FOO (v4di, >>, vashr);
      61  FOO (v4udi, >>, vlshr);
      62  FOO (v8di, <<, vashl);
      63  FOO (v8di, >>, vashr);
      64  FOO (v8udi, >>, vlshr);