/* { dg-do run } */
/* { dg-require-effective-target vsx_hw } */
/* { dg-options "-O2 -mvsx" } */

/* Verify there is no warning message.  */

#define NO_WARN_X86_INTRINSICS 1

#include <emmintrin.h>

#define N 5

__attribute__ ((noipa)) __m128i
test1 (__m128i v)
{
  return _mm_bslli_si128 (v, N);
}

__attribute__ ((noipa)) __m128i
test2 (__m128i v)
{
  return _mm_slli_si128 (v, N);
}

typedef union
{
  __m128i x;
  unsigned char a[16];
} union128i_ub;

int main()
{
  union128i_ub v;
  v.x
    = _mm_set_epi8 (1, 2, 3, 4, 10, 20, 30, 90, 80, 40, 100, 15, 98, 25, 98, 7);

  union128i_ub r1, r2;
  r1.x = test1 (v.x);
  r2.x = test2 (v.x);

  for (int i = 0; i < 16; i++)
    if (r1.a[i] != r2.a[i])
      __builtin_abort();

  return 0;
}