/* PR target/84220 */
/* Test to ensure we generate invalid parameter errors rather than an ICE
    when calling builtin_vec_sldw() with invalid parameters.  */
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-mvsx" } */

#include <altivec.h>

typedef  vector bool char vbc_t;
typedef  vector  signed char vsc_t;
typedef  vector  unsigned char vuc_t;
typedef  vector  bool int vbi_t;
typedef  vector  signed int vsi_t;
typedef  vector  unsigned int vui_t;
typedef  vector  pixel vp_t;
typedef  vector  bool short vbs_t;
typedef  vector  signed short vss_t;
typedef  vector  unsigned short vus_t;
typedef  vector  float vf_t;
typedef  vector  bool long long vbl_t;
typedef  vector  signed long long vsl_t;
typedef  vector  unsigned long long vul_t;
typedef  vector  double vd_t;

void 
test_vsc ( vsc_t v1, vsc_t v2, vsc_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vuc ( vuc_t v1, vuc_t v2, vuc_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vsi ( vsi_t v1, vsi_t v2, vsi_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vui ( vui_t v1, vui_t v2, vui_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vsl ( vsl_t v1, vsl_t v2, vsl_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vul ( vul_t v1, vul_t v2, vul_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vss ( vss_t v1, vss_t v2, vss_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}

void 
test_vus ( vus_t v1, vus_t v2, vus_t v3 )  \
{
  vec_sldw(v1, v2, v3); /* { dg-error "invalid parameter combination for AltiVec intrinsic" } */
  vec_sldw(v1, v2, 3);
}
