/* { dg-do compile } */
/* { dg-options "-O -mcpu=ultrasparc -mvis" } */
typedef char  vec8 __attribute__((vector_size(8)));
typedef short vec16 __attribute__((vector_size(8)));
typedef int   vec32 __attribute__((vector_size(8)));

extern vec8 foo1_8(void);
extern vec8 foo2_8(void);

vec8 fun8(void)
{
  return ~foo1_8 () | foo2_8 ();
}

vec8 fun8_2(vec8 a, vec8 b)
{
  return ~a | b;
}

extern vec16 foo1_16(void);
extern vec16 foo2_16(void);

vec16 fun16(void)
{
  return ~foo1_16 () | foo2_16 ();
}

vec16 fun16_2(vec16 a, vec16 b)
{
  return ~a | b;
}

extern vec32 foo1_32(void);
extern vec32 foo2_32(void);

vec32 fun32(void)
{
  return ~foo1_32 () | foo2_32 ();
}

vec32 fun32_2(vec32 a, vec32 b)
{
  return ~a | b;
}

/* This should be transformed into ~b | a.  */
vec8 fun8b(void)
{
  return foo1_8 () | ~foo2_8 ();
}

vec8 fun8_2b(vec8 a, vec8 b)
{
  return a | ~b;
}

vec16 fun16b(void)
{
  return foo1_16 () | ~foo2_16 ();
}

vec16 fun16_2b(vec16 a, vec16 b)
{
  return a | ~b;
}

vec32 fun32b(void)
{
  return foo1_32 () | ~foo2_32 ();
}

vec32 fun32_2b(vec32 a, vec32 b)
{
  return a | ~b;
}

/* { dg-final { scan-assembler-times "fornot1\t%" 12 } } */
