aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2017-08-14 11:46:03 +0000
committerBin Cheng <amker@gcc.gnu.org>2017-08-14 11:46:03 +0000
commit8d2d0de9f788c71f94b3fb80d1cbcaed9ecea855 (patch)
treeeee33e12bf3d0bc6867e237365c1d550d60ec0b1 /gcc
parent5316dd1b63913e390fb2a5d7b335aeacd9da3001 (diff)
downloadgcc-8d2d0de9f788c71f94b3fb80d1cbcaed9ecea855.zip
gcc-8d2d0de9f788c71f94b3fb80d1cbcaed9ecea855.tar.gz
gcc-8d2d0de9f788c71f94b3fb80d1cbcaed9ecea855.tar.bz2
re PR tree-optimization/81799 (ICE on valid code at -O3: verify_gimple failed)
PR tree-optimization/81799 * tree-loop-distribution.c (version_loop_by_alias_check): Force cond_expr to simple gimple operand. gcc/testsuite * gcc.dg/tree-ssa/pr81799.c: New. From-SVN: r251088
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81799.c25
-rw-r--r--gcc/tree-loop-distribution.c2
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 19bb575..a380b40 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-08-14 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81799
+ * tree-loop-distribution.c (version_loop_by_alias_check): Force
+ cond_expr to simple gimple operand.
+
2017-08-14 Wilco Dijkstra <wdijkstr@arm.com>
PR middle-end/46932
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8995806..9309b48 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-14 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81799
+ * gcc.dg/tree-ssa/pr81799.c: New.
+
2017-08-14 Wilco Dijkstra <wdijkstr@arm.com>
PR middle-end/46932
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81799.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81799.c
new file mode 100644
index 0000000..543ae94
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81799.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+int printf (const char *, ...);
+
+int a, c[1], d, e, **f;
+
+void fn1 (int h)
+{
+ int *i = 0;
+ for (d = 0; d < 1; d++)
+ {
+ if (d)
+ continue;
+ for (; e; e++)
+ {
+ a = c[*i];
+ if (h)
+ printf ("0");
+ }
+ return;
+ }
+ f = &i;
+}
+
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index 8d80ccc..b1b2934 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -2263,7 +2263,7 @@ version_loop_by_alias_check (struct loop *loop, vec<ddr_p> *alias_ddrs)
compute_alias_check_pairs (loop, alias_ddrs, &comp_alias_pairs);
create_runtime_alias_checks (loop, &comp_alias_pairs, &cond_expr);
cond_expr = force_gimple_operand_1 (cond_expr, &cond_stmts,
- is_gimple_condexpr, NULL_TREE);
+ is_gimple_val, NULL_TREE);
/* Depend on vectorizer to fold IFN_LOOP_DIST_ALIAS. */
if (flag_tree_loop_vectorize)