/* PR rtl-optimization/16104 */
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */
/* { dg-require-effective-target sse2_runtime } */

extern void abort (void);

typedef int V2SI __attribute__ ((vector_size (8)));
typedef unsigned int V2USI __attribute__ ((vector_size (8)));
typedef short V2HI __attribute__ ((vector_size (4)));
typedef unsigned int V2UHI __attribute__ ((vector_size (4)));

int
test1 (void)
{
  return (long long) (V2SI) 0LL;
}

int
test2 (V2SI x)
{
  return (long long) x;
}

V2SI
test3 (void)
{
  return (V2SI) (long long) (int) (V2HI) 0;
}

V2SI
test4 (V2HI x)
{
  return (V2SI) (long long) (int) x;
}

V2SI
test5 (V2USI x)
{
  return (V2SI) x;
}

void
__attribute__ ((noinline))
do_test (void)
{
  if (sizeof (short) != 2 || sizeof (int) != 4 || sizeof (long long) != 8)
    return;

  if (test1 () != 0)
    abort ();

  V2SI x = { 2, 2 };
  if (test2 (x) != 2)
    abort ();

  union { V2SI x; int y[2]; V2USI z; long long l; } u;
  u.x = test3 ();
  if (u.y[0] != 0 || u.y[1] != 0)
    abort ();

  V2HI y = { 4, 4 };
  union { V2SI x; long long y; } v;
  v.x = test4 (y);
  if (v.y != 0x40004)
    abort ();

  V2USI z = { 6, 6 };
  u.x = test5 (z);
  if (u.y[0] != 6 || u.y[1] != 6)
    abort ();
}

int
main (void)
{
  do_test ();
  return 0;
}
