aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-05-25 11:49:03 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-05-25 11:49:03 +0000
commit3072d4ea29f3b6b8b1708bd74428db307ee4976e (patch)
treeb9a8f055bf0c9112231afb930cd0db1fa26f8fcb /gcc
parenta86f2f6f94eeacf73b2f3204a84eda61c15338b3 (diff)
downloadgcc-3072d4ea29f3b6b8b1708bd74428db307ee4976e.zip
gcc-3072d4ea29f3b6b8b1708bd74428db307ee4976e.tar.gz
gcc-3072d4ea29f3b6b8b1708bd74428db307ee4976e.tar.bz2
re PR tree-optimization/71261 (Trunk GCC hangs on knl and broadwell targets)
2016-05-25 Richard Biener <rguenther@suse.de> PR tree-optimization/71261 * tree-if-conv.c (ifcvt_split_def_stmt): Walk uses on the interesting stmt instead of immediate uses when looking for the use operand to replace. * c-c++-common/torture/pr71261.c: New testcase. From-SVN: r236701
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/torture/pr71261.c11
-rw-r--r--gcc/tree-if-conv.c6
4 files changed, 26 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 937fc3e..aca886c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-05-25 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/71261
+ * tree-if-conv.c (ifcvt_split_def_stmt): Walk uses on the
+ interesting stmt instead of immediate uses when looking
+ for the use operand to replace.
+
2016-05-25 Martin Liska <mliska@suse.cz>
* ipa-inline.c (edge_badness): Use 'w/' instead of 'w'.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 897f0f0..abdfdd8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2016-05-25 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/71261
+ * c-c++-common/torture/pr71261.c: New testcase.
+
+2016-05-25 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/71264
* gcc.dg/vect/pr71264.c: New testcase.
diff --git a/gcc/testsuite/c-c++-common/torture/pr71261.c b/gcc/testsuite/c-c++-common/torture/pr71261.c
new file mode 100644
index 0000000..7290368
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/torture/pr71261.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-mavx2" { target x86_64-*-* i?86-*-* } } */
+
+extern int a, b, c, d, e, f;
+void fn1()
+{
+ for (int g = 0; g < d; g = 1)
+ for (int h = 0; h < 8; h = h + 2)
+ for (int i = h; i < h + 2; i = i + 1)
+ f = a && e || c && b;
+}
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index fa0cae6..5914a78 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -2529,7 +2529,7 @@ ifcvt_split_def_stmt (gimple *def_stmt, gimple *use_stmt)
gimple *copy_stmt;
gimple_stmt_iterator gsi;
use_operand_p use_p;
- imm_use_iterator imm_iter;
+ ssa_op_iter iter;
var = gimple_assign_lhs (def_stmt);
copy_stmt = gimple_copy (def_stmt);
@@ -2548,9 +2548,9 @@ ifcvt_split_def_stmt (gimple *def_stmt, gimple *use_stmt)
print_generic_expr (dump_file, lhs, TDF_SLIM);
fprintf (dump_file, "\n");
}
- FOR_EACH_IMM_USE_FAST (use_p, imm_iter, var)
+ FOR_EACH_SSA_USE_OPERAND (use_p, use_stmt, iter, SSA_OP_USE)
{
- if (USE_STMT (use_p) != use_stmt)
+ if (USE_FROM_PTR (use_p) != var)
continue;
SET_USE (use_p, lhs);
break;