[aarch64] PR target/87369 Prefer bsl/bit/bif for copysign

Richard Earnshaw (lists) Richard.Earnshaw@arm.com
Tue Dec 11 11:27:00 GMT 2018


The copysign operations will almost always be performed on values in
floating-point registers.  As such, we do not want the compiler to
simplify the operations into code sequences that can only be done using
the general-purpose register set.  Unfortunately, this is what is
currently happening.

Fortunately, it seems quite unlikely that copysign() will be
subsequently followed by other logical operations on the values
involved, so I think it is acceptable to use an unspec here.  This
allows us to preserve the operation in a form that allows the register
allocator to make the right choice later on, without limitation on the
final form of the operation (well, if we do end up using the gp register
bank, we get a dead constant load that we cannot easily eliminate at a
late stage).

	PR target/37369
	* config/aarch64/iterators.md (sizem1): Add sizes for SFmode and DFmode.
	(Vbtype): Add SFmode mapping.
	* config/aarch64/aarch64.md (copysigndf3, copysignsf3): Delete.
	(copysign<GPF:mode>3): New expand pattern.
	(copysign<GPF:mode>3_insn): New insn pattern.

Applied to trunk

R.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: copysign.patch
Type: text/x-patch
Size: 4683 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20181211/22072f40/attachment.bin>


More information about the Gcc-patches mailing list