[AArch64] Merge SVE FP unary patterns
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 7 Aug 2019 18:51:40 +0000 (18:51 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 7 Aug 2019 18:51:40 +0000 (18:51 +0000)
commitd45b20a5539b6f306a559470c3a7e9f84a058bfb
treecc2b8d1de01d36661b9b58925e7ea34016981ca7
parent8ad84de26e1032d80225905c611a47b64a385e8a
[AArch64] Merge SVE FP unary patterns

This patch merges the SVE FP rounding patterns with the other SVE
FP unary patterns.

At the moment, we only generate unary FP operations for full vectors,
so we can use (sqrt:VNx4SF ...) etc. in the rtl pattern.  With the ACLE,
it's also possible to generate predicated operations on partial vectors
without specifying a value for inactive lanes.  (sqrt:VNx4SF ...) would
then have different faulting behaviour from the instruction that the
pattern generates.

This patch therefore uses unspecs to represent the operations instead.
Later patches make this change for other patterns.

2019-08-07  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/iterators.md (UNSPEC_COND_FABS, UNSPEC_COND_FNEG)
(UNSPEC_COND_FRINTA, UNSPEC_COND_FRINTI, UNSPEC_COND_FRINTM)
(UNSPEC_COND_FRINTN, UNSPEC_COND_FRINTP, UNSPEC_COND_FRINTX)
(UNSPEC_COND_FRINTZ, UNSPEC_COND_FSQRT): New unspecs.
(optab, sve_fp_op): Handle them.
(SVE_FP_UNARY): Delete.
(optab): Remove sqrt entry.
(sve_fp_op): Remove neg, abs and sqrt entries.
(SVE_COND_FP_UNARY): New int iterator.
* config/aarch64/aarch64-sve.md (<frint_pattern><mode>2)
(*<frint_pattern><mode>2): Delete.
(<SVE_FP_UNARY:optab><SVE_F:mode>2): Replace with...
(<SVE_COND_FP_UNARY:optab><SVE_F:mode>2): ...this.
(*<SVE_FP_UNARY:optab><SVE_F:mode>2): Replace with...
(*<SVE_COND_FP_UNARY:optab><SVE_F:mode>2): ...this.

From-SVN: r274187
gcc/ChangeLog
gcc/config/aarch64/aarch64-sve.md
gcc/config/aarch64/iterators.md