1  /* { dg-do compile } */
       2  /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
       3  /* { dg-require-effective-target powerpc_p9vector_ok } */
       4  
       5  #include <altivec.h>
       6  
       7  typedef vector signed char	v16qi_t;
       8  typedef vector short		v8hi_t;
       9  typedef vector int		v4si_t;
      10  typedef vector long long	v2di_t;
      11  
      12  void v16qi_0a  (v16qi_t *p) { *p = (v16qi_t) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; }
      13  void v8hi_0a   (v8hi_t  *p) { *p = (v8hi_t)  { 0, 0, 0, 0, 0, 0, 0, 0 }; }
      14  void v4si_0a   (v4si_t  *p) { *p = (v4si_t)  { 0, 0, 0, 0 }; }
      15  void v2di_0a   (v2di_t  *p) { *p = (v2di_t)  { 0, 0 }; }
      16  
      17  void v16qi_0b  (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)0); }
      18  void v8hi_0b   (v8hi_t  *p) { *p = (v8hi_t)  vec_splats ((short)0); }
      19  void v4si_0b   (v4si_t  *p) { *p = (v4si_t)  vec_splats ((int)0); }
      20  void v2di_0b   (v2di_t  *p) { *p = (v2di_t)  vec_splats ((long long)0); }
      21  
      22  void v16qi_m1a (v16qi_t *p) { *p = (v16qi_t) { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; }
      23  void v8hi_m1a  (v8hi_t  *p) { *p = (v8hi_t)  { -1, -1, -1, -1, -1, -1, -1, -1 }; }
      24  void v4si_m1a  (v4si_t  *p) { *p = (v4si_t)  { -1, -1, -1, -1 }; }
      25  void v2di_m1a  (v2di_t  *p) { *p = (v2di_t)  { -1, -1 }; }
      26  
      27  void v16qi_m1b (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)-1); }
      28  void v8hi_m1b  (v8hi_t  *p) { *p = (v8hi_t)  vec_splats ((short)-1); }
      29  void v4si_m1b  (v4si_t  *p) { *p = (v4si_t)  vec_splats ((int)-1); }
      30  void v2di_m1b  (v2di_t  *p) { *p = (v2di_t)  vec_splats ((long long)-1); }
      31  
      32  void v16qi_5a  (v16qi_t *p) { *p = (v16qi_t) { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; }
      33  void v8hi_5a   (v8hi_t  *p) { *p = (v8hi_t)  { 5, 5, 5, 5, 5, 5, 5, 5 }; }
      34  void v4si_5a   (v4si_t  *p) { *p = (v4si_t)  { 5, 5, 5, 5 }; }
      35  void v2di_5a   (v2di_t  *p) { *p = (v2di_t)  { 5, 5 }; }
      36  
      37  void v16qi_5b  (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)5); }
      38  void v8hi_5b   (v8hi_t  *p) { *p = (v8hi_t)  vec_splats ((short)5); }
      39  void v4si_5b   (v4si_t  *p) { *p = (v4si_t)  vec_splats ((int)5); }
      40  void v2di_5b   (v2di_t  *p) { *p = (v2di_t)  vec_splats ((long long)5); }
      41  
      42  void v16qi_33a (v16qi_t *p) { *p = (v16qi_t) { 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }; }
      43  void v8hi_33a  (v8hi_t  *p) { *p = (v8hi_t)  { 33, 33, 33, 33, 33, 33, 33, 33 }; }
      44  void v4si_33a  (v4si_t  *p) { *p = (v4si_t)  { 33, 33, 33, 33 }; }
      45  void v2di_33a  (v2di_t  *p) { *p = (v2di_t)  { 33, 33 }; }
      46  
      47  void v16qi_33b (v16qi_t *p) { *p = (v16qi_t) vec_splats ((signed char)33); }
      48  void v8hi_33b  (v8hi_t  *p) { *p = (v8hi_t)  vec_splats ((short)33); }
      49  void v4si_33b  (v4si_t  *p) { *p = (v4si_t)  vec_splats ((int)33); }
      50  void v2di_33b  (v2di_t  *p) { *p = (v2di_t)  vec_splats ((long long)33); }
      51  
      52  /* { dg-final { scan-assembler     "xxspltib"     } } */
      53  /* { dg-final { scan-assembler     "vextsb2d"     } } */
      54  /* { dg-final { scan-assembler     "vextsb2w"     } } */
      55  /* { dg-final { scan-assembler     "vupk\[hl\]sb" } } */
      56  /* { dg-final { scan-assembler-not "lxvd2x"       } } */
      57  /* { dg-final { scan-assembler-not "lxvw4x"       } } */
      58  /* { dg-final { scan-assembler-not "lxv "         } } */
      59  /* { dg-final { scan-assembler-not "lxvx"         } } */
      60  /* { dg-final { scan-assembler-not "lvx"          } } */