aboutsummaryrefslogtreecommitdiff
path: root/gcc/targhooks.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2018-01-13 17:59:40 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2018-01-13 17:59:40 +0000
commit76a34e3f8565e36d164006e62f7380bfe6057154 (patch)
tree5d7839c9d03b922ec19e0df424632405eecb1a18 /gcc/targhooks.c
parent535e7c114a7ad2ad7a6a0def88cf9448fcd5f029 (diff)
downloadgcc-76a34e3f8565e36d164006e62f7380bfe6057154.zip
gcc-76a34e3f8565e36d164006e62f7380bfe6057154.tar.gz
gcc-76a34e3f8565e36d164006e62f7380bfe6057154.tar.bz2
Add an empty_mask_is_expensive hook
This patch adds a hook to control whether we avoid executing masked (predicated) stores when the mask is all false. We don't want to do that by default for SVE. 2018-01-13 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * target.def (empty_mask_is_expensive): New hook. * doc/tm.texi.in (TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE): New hook. * doc/tm.texi: Regenerate. * targhooks.h (default_empty_mask_is_expensive): Declare. * targhooks.c (default_empty_mask_is_expensive): New function. * tree-vectorizer.c (vectorize_loops): Only call optimize_mask_stores if the target says that empty masks are expensive. * config/aarch64/aarch64.c (aarch64_empty_mask_is_expensive): New function. (TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE): Redefine. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r256631
Diffstat (limited to 'gcc/targhooks.c')
-rw-r--r--gcc/targhooks.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 5b60944..d83076f 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -1319,6 +1319,14 @@ default_get_mask_mode (poly_uint64 nunits, poly_uint64 vector_size)
return opt_machine_mode ();
}
+/* By default consider masked stores to be expensive. */
+
+bool
+default_empty_mask_is_expensive (unsigned ifn)
+{
+ return ifn == IFN_MASK_STORE;
+}
+
/* By default, the cost model accumulates three separate costs (prologue,
loop body, and epilogue) for a vectorized loop or block. So allocate an
array of three unsigned ints, set it to zero, and return its address. */