/* { dg-do run } */
/* { dg-options "-O2 -mavx512f" } */
/* { dg-require-effective-target avx512f } */

#define AVX512F

#include "avx512f-helper.h"

#define SIZE (AVX512F_LEN / 32)
#include "avx512f-mask-type.h"

static void
CALC (int *r, int *s1, long long* s2)
{
  int i;
  int count = s2[0];
  for (i = 0; i < SIZE; i++)
    {
      r[i] = count < 32 ? (s1[i] << count) : 0;
    }
}

void
TEST (void)
{
  int i, sign;
  UNION_TYPE (AVX512F_LEN, i_d) res1, res2, res3, src1;
  UNION_TYPE (128, i_q) src2;
  MASK_TYPE mask = MASK_VALUE;
  int res_ref[SIZE];

  long long imm;
  sign = -1;
  for (i = 0; i < SIZE; i++)
    {
      src1.a[i] = 2 + sign * 7 * i % 291;
      sign = sign * -1;
    }

  for (imm = 1; imm <= 33; imm++)
    {
      src2.a[0] = imm;
      for (i = 0; i < SIZE; i++)
	res2.a[i] = DEFAULT_VALUE;

      res1.x = INTRINSIC (_sll_epi32) (src1.x, src2.x);
      res2.x = INTRINSIC (_mask_sll_epi32) (res2.x, mask, src1.x, src2.x);
      res3.x = INTRINSIC (_maskz_sll_epi32) (mask, src1.x, src2.x);

      CALC (res_ref, src1.a, src2.a);

      if (UNION_CHECK (AVX512F_LEN, i_d) (res1, res_ref))
	abort ();

      MASK_MERGE (i_d) (res_ref, mask, SIZE);
      if (UNION_CHECK (AVX512F_LEN, i_d) (res2, res_ref))
	abort ();

      MASK_ZERO (i_d) (res_ref, mask, SIZE);
      if (UNION_CHECK (AVX512F_LEN, i_d) (res3, res_ref))
	abort ();
    }
}
