summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-22 17:04:51 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-22 17:04:51 +0000
commit3bbc3f795c25bc60de3ef0ee0fc16fb002777c7a (patch)
treeb076f5f5fcdbd91d3cf64c00f6c18bb983605c16
parent2c385ae3703851e2e2489036e95ec713c3985423 (diff)
downloadgcc-3bbc3f795c25bc60de3ef0ee0fc16fb002777c7a.tar.gz
PR82289: Computing peeling costs for irrelevant drs
This PR shows that we weren't filtering out irrelevant stmts in vect_get_peeling_costs_all_drs (unlike related loops in which we iterate over all datarefs). 2017-09-22 Richard Sandiford <richard.sandiford@linaro.org> gcc/ PR tree-optimization/82289 * tree-vect-data-refs.c (vect_get_peeling_costs_all_drs): Check STMT_VINFO_RELEVANT_P. gcc/testsuite/ PR tree-optimization/82289 * gcc.dg/vect/pr82289.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253103 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr82289.c28
-rw-r--r--gcc/tree-vect-data-refs.c3
4 files changed, 42 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fdb7221848c..02a5b7eb26d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,10 @@
2017-09-22 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/82289
+ * tree-vect-data-refs.c (vect_get_peeling_costs_all_drs): Check
+ STMT_VINFO_RELEVANT_P.
+
+2017-09-22 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 39838f595fb..54723c2c71b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
2017-09-22 Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/82289
+ * gcc.dg/vect/pr82289.c: New test.
+
+2017-09-22 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
diff --git a/gcc/testsuite/gcc.dg/vect/pr82289.c b/gcc/testsuite/gcc.dg/vect/pr82289.c
new file mode 100644
index 00000000000..ae3001f306f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr82289.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+
+int a, b, c, *d, *f[1];
+
+void fn1 (int *j)
+{
+ int e, g, h = 1;
+ for (; e; e++)
+ {
+ if (g > 0)
+ {
+ d = j;
+ return;
+ }
+ if (!h)
+ while (g)
+ ;
+ while (h < 1)
+ if (a)
+ {
+ fn1 (&h);
+ h = 0;
+ }
+ f[e] = &c;
+ }
+ while (1)
+ ;
+}
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 3c57e5c0be0..c4314a0e2d8 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -1326,6 +1326,9 @@ vect_get_peeling_costs_all_drs (vec<data_reference_p> datarefs,
{
gimple *stmt = DR_STMT (dr);
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ if (!STMT_VINFO_RELEVANT_P (stmt_info))
+ continue;
+
/* For interleaving, only the alignment of the first access
matters. */
if (STMT_VINFO_GROUPED_ACCESS (stmt_info)