re PR tree-optimization/71261 (Trunk GCC hangs on knl and broadwell targets)
authorRichard Biener <rguenther@suse.de>
Wed, 25 May 2016 11:49:03 +0000 (11:49 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 25 May 2016 11:49:03 +0000 (11:49 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/torture/pr71261.c [new file with mode: 0644]
gcc/tree-if-conv.c

index 937fc3ed0929d75542a4f21ac07bdb4c8409c81d..aca886c90cb5ad60fa59f0526231cd108de39bc8 100644 (file)
@@ -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'.
index 897f0f03e50b52006846e4d100bd1f0d773e5e24..abdfdd81baae46cd837671fd9b956dff2913fe7a 100644 (file)
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/c-c++-common/torture/pr71261.c b/gcc/testsuite/c-c++-common/torture/pr71261.c
new file mode 100644 (file)
index 0000000..7290368
--- /dev/null
@@ -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;
+}
index fa0cae6fdde2017fedd41c9a2c2294e063541a4b..5914a785ae8537a41c1859bcc2ed56ba45183579 100644 (file)
@@ -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;