aboutsummaryrefslogtreecommitdiff
path: root/gcc/internal-fn.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-11-17 18:55:55 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-11-17 18:55:55 +0000
commit70439f0d61b811fa5b9a77fcdf40c6353daa8f75 (patch)
tree9b4ddd183b2f4dd515f06826aaa396589cf86c98 /gcc/internal-fn.c
parent10766209ec09ef42deb8cb877f1893a8a03f2a97 (diff)
downloadgcc-70439f0d61b811fa5b9a77fcdf40c6353daa8f75.zip
gcc-70439f0d61b811fa5b9a77fcdf40c6353daa8f75.tar.gz
gcc-70439f0d61b811fa5b9a77fcdf40c6353daa8f75.tar.bz2
Vectorize internal functions
This patch tries to vectorize built-in and internal functions as internal functions first, falling back on the current built-in target hooks otherwise. This means that we'll automatically pick up vector versions of optabs without the target having to implement any special hooks. E.g. we'll use V4SF sqrt if the target defines a "sqrtv4sf2" optab. As well as being simpler, it means that the target-independent code has more idea what the vectorized function does. Tested on x86_64-linux-gnu, aarch64-linux-gnu, arm-linux-gnu and powerpc64-linux-gnu. gcc/ * internal-fn.h (direct_internal_fn_info): Add vectorizable flag. * internal-fn.c (direct_internal_fn_array): Update accordingly. * tree-vectorizer.h (vectorizable_function): Delete. * tree-vect-stmts.c: Include internal-fn.h. (vectorizable_internal_function): New function. (vectorizable_function): Inline into... (vectorizable_call): ...here. Explicitly reject calls that read from or write to memory. Try using an internal function before falling back on the old vectorizable_function behavior. From-SVN: r230492
Diffstat (limited to 'gcc/internal-fn.c')
-rw-r--r--gcc/internal-fn.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
index 06c5d9e..df3b7dc 100644
--- a/gcc/internal-fn.c
+++ b/gcc/internal-fn.c
@@ -69,13 +69,13 @@ init_internal_fns ()
/* Create static initializers for the information returned by
direct_internal_fn. */
-#define not_direct { -2, -2 }
-#define mask_load_direct { -1, 2 }
-#define load_lanes_direct { -1, -1 }
-#define mask_store_direct { 3, 2 }
-#define store_lanes_direct { 0, 0 }
-#define unary_direct { 0, 0 }
-#define binary_direct { 0, 0 }
+#define not_direct { -2, -2, false }
+#define mask_load_direct { -1, 2, false }
+#define load_lanes_direct { -1, -1, false }
+#define mask_store_direct { 3, 2, false }
+#define store_lanes_direct { 0, 0, false }
+#define unary_direct { 0, 0, true }
+#define binary_direct { 0, 0, true }
const direct_internal_fn_info direct_internal_fn_array[IFN_LAST + 1] = {
#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) not_direct,