aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-14 08:50:10 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-14 08:50:10 +0000
commit00fa90d975bfacfd91a615fbee24e3e6a100100f (patch)
tree04abc2c2a642d405e73a8b28d1145a9ef19b9597 /gcc/builtins.c
parent052f7399dd78d94d27fc1c3e1696cc7f93063610 (diff)
downloadgcc-00fa90d975bfacfd91a615fbee24e3e6a100100f.zip
gcc-00fa90d975bfacfd91a615fbee24e3e6a100100f.tar.gz
gcc-00fa90d975bfacfd91a615fbee24e3e6a100100f.tar.bz2
[AArch64] Rework SVE integer comparisons
The remaining uses of UNSPEC_MERGE_PTRUE were in integer comparison patterns. These aren't actually merging operations but zeroing ones, although there's no practical difference when the predicate is a PTRUE. All comparisons produced by expand are predicated on a PTRUE, although we try to pattern-match a compare-and-AND as a predicated comparison during combine. Like previous patches, this one rearranges things in a way that works better with the ACLE, where the initial predicate might or might not be a PTRUE. The new patterns use UNSPEC_PRED_Z to represent zeroing predication, with a aarch64_sve_ptrue_flag to record whether the predicate is all-true (as for UNSPEC_PTEST). See the block comment in the patch for more details. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64-protos.h (aarch64_sve_same_pred_for_ptest_p): Declare. * config/aarch64/aarch64.c (aarch64_sve_same_pred_for_ptest_p) (aarch64_sve_emit_int_cmp): New functions. (aarch64_convert_sve_data_to_pred): Use aarch64_sve_emit_int_cmp. (aarch64_sve_cmp_operand_p, aarch64_emit_sve_ptrue_op_cc): Delete. (aarch64_expand_sve_vec_cmp_int): Use aarch64_sve_emit_int_cmp. * config/aarch64/aarch64.md (UNSPEC_MERGE_PTRUE): Delete. (UNSPEC_PRED_Z): New unspec. (set_clobber_cc_nzc): Delete. * config/aarch64/aarch64-sve.md: Add a block comment about UNSPEC_PRED_Z. (*cmp<SVE_INT_CMP:cmp_op><mode>): Rename to... (@aarch64_pred_cmp<SVE_INT_CMP:cmp_op><mode>): ...this, replacing the old pattern with that name. Use UNSPEC_PRED_Z instead of UNSPEC_MERGE_PTRUE. (*cmp<SVE_INT_CMP:cmp_op><mode>_cc): Use UNSPEC_PRED_Z instead of UNSPEC_MERGE_PTRUE. Use aarch64_sve_same_pred_for_ptest_p to check for compatible predicates. (*cmp<cmp_op><SVE_INT_CMP:mode>_ptest): Likewise. (*cmp<cmp_op><mode>_and): Match a known-ptrue UNSPEC_PRED_Z instead of UNSPEC_MERGE_PTRUE. Split into the new form of predicated comparisons above. From-SVN: r274429
Diffstat (limited to 'gcc/builtins.c')
0 files changed, 0 insertions, 0 deletions