/* PR target/104612 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-additional-options "-msse2 -mfpmath=sse" { target i?86-*-* x86_64-*-* } } */

struct V { float x, y; };

struct V
foo (struct V v)
{
  struct V ret;
  ret.x = __builtin_copysignf (1.0e+0, v.x);
  ret.y = __builtin_copysignf (1.0e+0, v.y);
  return ret;
}

float
bar (struct V v)
{
  return __builtin_copysignf (v.x, v.y);
}

float
baz (struct V v)
{
  return v.x * __builtin_copysignf (1.0f, v.y);
}