aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>2019-07-24 07:20:24 +0000
committerPrathamesh Kulkarni <prathamesh3492@gcc.gnu.org>2019-07-24 07:20:24 +0000
commit21caa1a2649d586f4f8830aba43b0c132584f2dd (patch)
tree1dd8d376056aa5a60d5b91c0be08815d81f4ef3d
parent70121844349587b23c3950e844021a22ab51638c (diff)
downloadgcc-21caa1a2649d586f4f8830aba43b0c132584f2dd.zip
gcc-21caa1a2649d586f4f8830aba43b0c132584f2dd.tar.gz
gcc-21caa1a2649d586f4f8830aba43b0c132584f2dd.tar.bz2
re PR middle-end/91166 ([SVE] Unfolded ZIPs of constants)
2019-07-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR middle-end/91166 * match.pd (vec_perm_expr(v, v, mask) -> v): New pattern. (define_predicates): Add entry for uniform_vector_p. (vec_same_elem_p): New match pattern. testsuite/ * gcc.target/aarch64/sve/pr91166.c: New test. From-SVN: r273758
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/match.pd16
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pr91166.c20
4 files changed, 47 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 43d1526..7bb56a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-07-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ PR middle-end/91166
+ * match.pd (vec_perm_expr(v, v, mask) -> v): New pattern.
+ (define_predicates): Add entry for uniform_vector_p.
+ (vec_same_elem_p): New match pattern.
+
2019-07-24 Iain Sandoe <iain@sandoe.co.uk>
PR bootstrap/87030
diff --git a/gcc/match.pd b/gcc/match.pd
index 4a7aa01..c5c6a04 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -36,7 +36,8 @@ along with GCC; see the file COPYING3. If not see
integer_valued_real_p
integer_pow2p
uniform_integer_cst_p
- HONOR_NANS)
+ HONOR_NANS
+ uniform_vector_p)
/* Operator lists. */
(define_operator_list tcc_comparison
@@ -5568,3 +5569,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
{ bitsize_int (at * tree_to_uhwi (TYPE_SIZE (TREE_TYPE (type)))); })
(if (changed)
(vec_perm { op0; } { op1; } { op2; }))))))))))
+
+/* VEC_PERM_EXPR (v, v, mask) -> v where v contains same element. */
+
+(match vec_same_elem_p
+ @0
+ (if (uniform_vector_p (@0))))
+
+(match vec_same_elem_p
+ (vec_duplicate @0))
+
+(simplify
+ (vec_perm vec_same_elem_p@0 @0 @1)
+ @0)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 75da21f..369634e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ PR middle-end/91166
+ * gcc.target/aarch64/sve/pr91166.c: New test.
+
2019-07-23 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/54072
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr91166.c b/gcc/testsuite/gcc.target/aarch64/sve/pr91166.c
new file mode 100644
index 0000000..42654be
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/pr91166.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=armv8.2-a+sve -fdump-tree-optimized" } */
+
+void
+f1 (double x[][4])
+{
+ for (int i = 0; i < 4; ++i)
+ for (int j = 0; j < 4; ++j)
+ x[i][j] = 0;
+}
+
+void
+f2 (double x[][4], double y)
+{
+ for (int i = 0; i < 4; ++i)
+ for (int j = 0; j < 4; ++j)
+ x[i][j] = y;
+}
+
+/* { dg-final { scan-tree-dump-not "VEC_PERM_EXPR" "optimized"} } */