aboutsummaryrefslogtreecommitdiff
path: root/libsanitizer/interception/interception_linux.h
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-14 08:03:26 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-14 08:03:26 +0000
commit678faefcab01f9e9eeb222852675b5a042aaf900 (patch)
tree5f22df29617c3ab4990f86df471272e7e32a5f57 /libsanitizer/interception/interception_linux.h
parent34467289631e29545e14148515ab5f5d0d9e4fa7 (diff)
downloadgcc-678faefcab01f9e9eeb222852675b5a042aaf900.zip
gcc-678faefcab01f9e9eeb222852675b5a042aaf900.tar.gz
gcc-678faefcab01f9e9eeb222852675b5a042aaf900.tar.bz2
[AArch64] Canonicalise SVE predicate constants
This patch makes sure that we build all SVE predicate constants as VNx16BI before RA, to encourage similar constants to be reused between modes. This is also useful for the ACLE, where the single predicate type svbool_t is always a VNx16BI. Also, and again to encourage reuse, the patch makes us use a .B PTRUE for all ptrue-predicated operations, rather than (for example) using a .S PTRUE for 32-bit operations and a .D PTRUE for 64-bit operations. The only current case in which a .H, .S or .D operation needs to be predicated by a "strict" .H/.S/.D PTRUE is the PTEST in a conditional branch, which an earlier patch fixed to use an appropriate VNx16BI constant. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_target_reg): New function. (aarch64_emit_set_immediate): Likewise. (aarch64_ptrue_reg): Build a VNx16BI constant and then bitcast it. (aarch64_pfalse_reg): Likewise. (aarch64_convert_sve_data_to_pred): New function. (aarch64_sve_move_pred_via_while): Take an optional target register and the required register mode. (aarch64_expand_sve_const_pred_1): New function. (aarch64_expand_sve_const_pred): Likewise. (aarch64_expand_mov_immediate): Build an all-true predicate if the significant bits of the immediate are all true. Use aarch64_expand_sve_const_pred for all compile-time predicate constants. (aarch64_mov_operand_p): Force predicate constants to be VNx16BI before register allocation. * config/aarch64/aarch64-sve.md (*vec_duplicate<mode>_reg): Use a VNx16BI PTRUE when splitting the memory alternative. (vec_duplicate<mode>): Update accordingly. (*pred_cmp<cmp_op><mode>): Rename to... (@aarch64_pred_cmp<cmp_op><mode>): ...this. gcc/testsuite/ * gcc.target/aarch64/sve/spill_4.c: Expect all ptrues to be .Bs. * gcc.target/aarch64/sve/single_1.c: Likewise. * gcc.target/aarch64/sve/single_2.c: Likewise. * gcc.target/aarch64/sve/single_3.c: Likewise. * gcc.target/aarch64/sve/single_4.c: Likewise. From-SVN: r274415
Diffstat (limited to 'libsanitizer/interception/interception_linux.h')
0 files changed, 0 insertions, 0 deletions