On Tue, 4 Oct 2016, Marc Glisse wrote:
> On Tue, 4 Oct 2016, Richard Biener wrote:
>
> > Possibly. Though then for FP we also want - abs (a) -> copysign (a, -1).
>
> I thought this might fix PR 62055, but at least on x86_64, we generate much
> worse code for copysign(,-1) than for -abs :-(
I would have expected copysign(,-1) to be a simple IOR ...
double foo (double x)
{
return __builtin_copysign (x, -1.);
}
foo:
.LFB0:
.cfi_startproc
movsd .LC0(%rip), %xmm1
movapd %xmm1, %xmm2
andpd .LC2(%rip), %xmm2
andpd .LC1(%rip), %xmm0
orpd %xmm2, %xmm0
ret
ICK. -fabs (x) yields
foo:
.LFB0:
.cfi_startproc
andpd .LC0(%rip), %xmm0
xorpd .LC1(%rip), %xmm0
ret
I expected a simple orpd .LC0(%rip), %xmm0 ...
Richard.