aboutsummaryrefslogtreecommitdiff
path: root/libsanitizer
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-08-14 08:16:04 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-08-14 08:16:04 +0000
commitc9c5a8090c58b84c1eb45e39e77eee223f992009 (patch)
tree0b582b31fcbaa8a7494f664504b8280c1a12812b /libsanitizer
parent6fe679cc6be7a55832f9b88a8cf0751e8d5eff6e (diff)
downloadgcc-c9c5a8090c58b84c1eb45e39e77eee223f992009.zip
gcc-c9c5a8090c58b84c1eb45e39e77eee223f992009.tar.gz
gcc-c9c5a8090c58b84c1eb45e39e77eee223f992009.tar.bz2
[AArch64] Add a "GP strictness" operand to SVE FP unspecs
This patch makes the SVE unary, binary and ternary FP unspecs take a new "GP strictness" operand that indicates whether the predicate has to be taken literally, or whether it is valid to make extra lanes active (up to and including using a PTRUE). This again is laying the groundwork for the ACLE patterns, in which the value can depend on the FP command-line flags. At the moment it's only needed for addition, subtraction and multiplication, which have unpredicated forms that can only be used when operating on all lanes is safe. But in future it might be useful for optimising predicate usage. The strict mode requires extra alternatives for addition, subtraction and multiplication, but I've left those for the main ACLE patch. 2019-08-14 Richard Sandiford <richard.sandiford@arm.com> Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org> gcc/ * config/aarch64/aarch64.md (SVE_RELAXED_GP, SVE_STRICT_GP): New constants. * config/aarch64/predicates.md (aarch64_sve_gp_strictness): New predicate. * config/aarch64/aarch64-protos.h (aarch64_sve_pred_dominates_p): Declare. * config/aarch64/aarch64.c (aarch64_sve_pred_dominates_p): New function. * config/aarch64/aarch64-sve.md: Add a block comment about the handling of predicated FP operations. (<SVE_COND_FP_UNARY:optab><SVE_F:mode>2, add<SVE_F:mode>3) (sub<SVE_F:mode>3, mul<SVE_F:mode>3, div<SVE_F:mode>3) (<SVE_COND_FP_MAXMIN_PUBLIC:optab><SVE_F:mode>3) (<SVE_COND_FP_MAXMIN_PUBLIC:maxmin_uns><SVE_F:mode>3) (<SVE_COND_FP_TERNARY:optab><SVE_F:mode>4): Add an SVE_RELAXED_GP operand. (cond_<SVE_COND_FP_BINARY:optab><SVE_F:mode>) (cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>): Add an SVE_STRICT_GP operand. (*<SVE_COND_FP_UNARY:optab><SVE_F:mode>2) (*cond_<SVE_COND_FP_BINARY:optab><SVE_F:mode>_2) (*cond_<SVE_COND_FP_BINARY:optab><SVE_F:mode>_3) (*cond_<SVE_COND_FP_BINARY:optab><SVE_F:mode>_any) (*fabd<SVE_F:mode>3, *div<SVE_F:mode>3) (*<SVE_COND_FP_MAXMIN_PUBLIC:optab><SVE_F:mode>3) (*<SVE_COND_FP_TERNARY:optab><SVE_F:mode>4) (*cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>_2) (*cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>_4) (*cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>_any): Match the strictness operands. Use aarch64_sve_pred_dominates_p to check whether the predicate on the conditional operation is suitable for merging. Split patterns into the canonical equal-predicate form. (*add<SVE_F:mode>3, *sub<SVE_F:mode>3, *mul<SVE_F:mode>3): Likewise. Restrict the unpredicated alternatives to SVE_RELAXED_GP. Co-Authored-By: Kugan Vivekanandarajah <kuganv@linaro.org> From-SVN: r274418
Diffstat (limited to 'libsanitizer')
0 files changed, 0 insertions, 0 deletions