[AArch64] Rework SVE PTEST patterns
This patch reworks the rtl representation of the SVE PTEST operation so that: - the governing predicate is always VNx16BI (and so all bits are defined) - it is still possible to pattern-match the governing predicate in the mode that it had previously - a new hint operand says whether the governing predicate is known to be all true for the element size of interest, rather than this being part of the unspec name. These changes make it easier to handle more flag-setting instructions as part of the ACLE work. See the comment in aarch64-sve.md for more details. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64-protos.h (aarch64_ptrue_all): Declare. * config/aarch64/aarch64.c (aarch64_ptrue_all): New function. * config/aarch64/aarch64.md (UNSPEC_PTEST_PTRUE): Delete. (UNSPEC_PTEST): New unspec. (SVE_MAYBE_NOT_PTRUE, SVE_KNOWN_PTRUE): New constants. * config/aarch64/iterators.md (data_bytes): New mode attribute. * config/aarch64/predicates.md (aarch64_sve_ptrue_flag): New predicate. * config/aarch64/aarch64-sve.md: Add a new section describing the handling of UNSPEC_PTEST. (pred_<LOGICAL:optab><PRED_ALL:mode>3): Rename to... (@aarch64_pred_<LOGICAL:optab><PRED_ALL:mode>_z): ...this. (ptest_ptrue<mode>): Replace with... (aarch64_ptest<mode>): ...this new pattern. (cbranch<mode>4): Update after above changes. (*<LOGICAL:optab><PRED_ALL:mode>3_cc): Use UNSPEC_PTEST instead of UNSPEC_PTEST_PTRUE. (*cmp<SVE_INT_CMP:cmp_op><SVE_I:mode>_cc): Likewise. (*cmp<SVE_INT_CMP:cmp_op><SVE_I:mode>_ptest): Likewise. (*while_ult<GPI:mode><PRED_ALL:mode>_cc): Likewise. From-SVN: r274414
Showing
Please
register
or
sign in
to comment