On Tue, 4 Oct 2016, Richard Biener wrote: > On Tue, 4 Oct 2016, Joseph Myers wrote: > > > On Tue, 4 Oct 2016, Richard Biener wrote: > > > > > Possibly. Though then for FP we also want - abs (a) -> copysign (a, -1). > > > > For architectures such as powerpc that have a negated-abs instruction, > > does it get properly generated from the copysign code? (The relevant > > pattern in rs6000.md uses (neg (abs)) - is that the correct canonical RTL > > for this?) > > I have no idea - given that there is no copysign RTL code I suppose > it is the only machine independent RTL that can do this? > > The question would be whether the copysign optab of said targets would > special-case the -1 case appropriately.
Why -1? Any constant in copysign should be handled appropriately. I'd say that (neg (abs)) is probably better as a canonical representation, so map copysign from a constant to either (abs) or (neg (abs)) appropriately. Then in the case where abs is expanded with bit manipulation, (neg (abs)) should be expanded to a single OR. I don't know whether the RTL optimizers will map the AND / OR combination to a single OR, but if they do then there should be no need to special-case (neg (abs)) in expansion, and when (abs) RTL is generated a machine description's (neg (abs)) pattern should match automatically. -- Joseph S. Myers jos...@codesourcery.com