aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2017-08-08 11:32:05 +0000
committerBin Cheng <amker@gcc.gnu.org>2017-08-08 11:32:05 +0000
commita5c93f53874df217443c718dd5e938783e695871 (patch)
tree6087985587cf5485a2b2c68964fe6d48f55c6404 /gcc
parenteac3ab4aa4fbdaec242605f636a9acce417fad9f (diff)
downloadgcc-a5c93f53874df217443c718dd5e938783e695871.zip
gcc-a5c93f53874df217443c718dd5e938783e695871.tar.gz
gcc-a5c93f53874df217443c718dd5e938783e695871.tar.bz2
re PR tree-optimization/81744 (ICE: verify_ssa failed, at tree-ssa.c:1186)
PR tree-optimization/81744 * tree-predcom.c (prepare_finalizers_chain): Deep copy expr of loop's number of iterations. gcc/testsuite * gcc.dg/tree-ssa/pr81744.c: New. From-SVN: r250950
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr81744.c13
-rw-r--r--gcc/tree-predcom.c2
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dde91ce..d830fd6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-08-08 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81744
+ * tree-predcom.c (prepare_finalizers_chain): Deep copy expr of
+ loop's number of iterations.
+
2017-08-08 Martin Liska <mliska@suse.cz>
* asan.c: Include header files.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e08c2e8..211e629 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-08 Bin Cheng <bin.cheng@arm.com>
+
+ PR tree-optimization/81744
+ * gcc.dg/tree-ssa/pr81744.c: New.
+
2017-08-08 Marek Polacek <polacek@redhat.com>
PR c++/81607
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr81744.c b/gcc/testsuite/gcc.dg/tree-ssa/pr81744.c
new file mode 100644
index 0000000..b0f5d38f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr81744.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-tree-loop-vectorize -fno-tree-slp-vectorize -fno-inline -fdump-tree-pcom-details" } */
+
+typedef struct {
+ int a, b;
+} CompandSegment;
+int a;
+CompandSegment *b;
+void fn1() {
+ for (; a; a++)
+ b[a].a = b[a].b = b[a - 1].a = b[a - 1].b = 0;
+}
+/* { dg-final { scan-tree-dump-times "Store-stores chain" 2 "pcom"} } */
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c
index 4538773..e7b10cb 100644
--- a/gcc/tree-predcom.c
+++ b/gcc/tree-predcom.c
@@ -2940,7 +2940,7 @@ prepare_finalizers_chain (struct loop *loop, chain_p chain)
if (TREE_CODE (niters) != INTEGER_CST && TREE_CODE (niters) != SSA_NAME)
{
- niters = copy_node (niters);
+ niters = unshare_expr (niters);
niters = force_gimple_operand (niters, &stmts, true, NULL);
if (stmts)
{