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
Name |
Last commit
|
Last update |
---|---|---|
INSTALL | Loading commit data... | |
config | Loading commit data... | |
contrib | Loading commit data... | |
fixincludes | Loading commit data... | |
gcc | Loading commit data... | |
gnattools | Loading commit data... | |
gotools | Loading commit data... | |
include | Loading commit data... | |
intl | Loading commit data... | |
libada | Loading commit data... | |
libatomic | Loading commit data... | |
libbacktrace | Loading commit data... | |
libcc1 | Loading commit data... | |
libcpp | Loading commit data... | |
libdecnumber | Loading commit data... | |
libffi | Loading commit data... | |
libgcc | Loading commit data... | |
libgfortran | Loading commit data... | |
libgo | Loading commit data... | |
libgomp | Loading commit data... | |
libhsail-rt | Loading commit data... | |
libiberty | Loading commit data... | |
libitm | Loading commit data... | |
libobjc | Loading commit data... | |
liboffloadmic | Loading commit data... | |
libphobos | Loading commit data... | |
libquadmath | Loading commit data... | |
libsanitizer | Loading commit data... | |
libssp | Loading commit data... | |
libstdc++-v3 | Loading commit data... | |
libvtv | Loading commit data... | |
lto-plugin | Loading commit data... | |
maintainer-scripts | Loading commit data... | |
zlib | Loading commit data... | |
.dir-locals.el | Loading commit data... | |
.gitattributes | Loading commit data... | |
.gitignore | Loading commit data... | |
ABOUT-NLS | Loading commit data... | |
COPYING | Loading commit data... | |
COPYING.LIB | Loading commit data... | |
COPYING.RUNTIME | Loading commit data... | |
COPYING3 | Loading commit data... | |
COPYING3.LIB | Loading commit data... | |
ChangeLog | Loading commit data... | |
ChangeLog.jit | Loading commit data... | |
ChangeLog.tree-ssa | Loading commit data... | |
MAINTAINERS | Loading commit data... | |
Makefile.def | Loading commit data... | |
Makefile.in | Loading commit data... | |
Makefile.tpl | Loading commit data... | |
README | Loading commit data... | |
ar-lib | Loading commit data... | |
compile | Loading commit data... | |
config-ml.in | Loading commit data... | |
config.guess | Loading commit data... | |
config.rpath | Loading commit data... | |
config.sub | Loading commit data... | |
configure | Loading commit data... | |
configure.ac | Loading commit data... | |
depcomp | Loading commit data... | |
install-sh | Loading commit data... | |
libtool-ldflags | Loading commit data... | |
libtool.m4 | Loading commit data... | |
ltgcc.m4 | Loading commit data... | |
ltmain.sh | Loading commit data... | |
ltoptions.m4 | Loading commit data... | |
ltsugar.m4 | Loading commit data... | |
ltversion.m4 | Loading commit data... | |
lt~obsolete.m4 | Loading commit data... | |
missing | Loading commit data... | |
mkdep | Loading commit data... | |
mkinstalldirs | Loading commit data... | |
move-if-change | Loading commit data... | |
multilib.am | Loading commit data... | |
symlink-tree | Loading commit data... | |
test-driver | Loading commit data... | |
ylwrap | Loading commit data... |