summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>2019-10-28 15:01:24 +0000
committerPrathamesh Kulkarni <prathamesh3492@gcc.gnu.org>2019-10-28 15:01:24 +0000
commit4b0ab0d9588f6c63f7102e70de52684cdda49de8 (patch)
tree0b3bbb28c2906a9e3fcbde687afc7295729329b4
parentfa03d5763a91f5061152842c92fbb4e446a3b75f (diff)
re PR tree-optimization/92163 (ICE: Segmentation fault (in bitmap_set_bit))
2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR tree-optimization/92163 * tree-ssa-dse.c (delete_dead_or_redundant_assignment): New param need_eh_cleanup with default value NULL. Gate on need_eh_cleanup before calling bitmap_set_bit. (dse_optimize_redundant_stores): Pass global need_eh_cleanup to delete_dead_or_redundant_assignment. (dse_dom_walker::dse_optimize_stmt): Likewise. * tree-ssa-dse.h (delete_dead_or_redundant_assignment): Adjust prototype. testsuite/ * gcc.dg/tree-ssa/pr92163.c: New test. From-SVN: r277525
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr92163.c16
-rw-r--r--gcc/tree-ssa-dse.c11
-rw-r--r--gcc/tree-ssa-dse.h3
5 files changed, 40 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f3410ebf730..aa9c489b176 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,16 @@
2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+ PR tree-optimization/92163
+ * tree-ssa-dse.c (delete_dead_or_redundant_assignment): New param
+ need_eh_cleanup with default value NULL. Gate on need_eh_cleanup
+ before calling bitmap_set_bit.
+ (dse_optimize_redundant_stores): Pass global need_eh_cleanup to
+ delete_dead_or_redundant_assignment.
+ (dse_dom_walker::dse_optimize_stmt): Likewise.
+ * tree-ssa-dse.h (delete_dead_or_redundant_assignment): Adjust prototype.
+
+2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
PR middle-end/91272
* tree-vect-stmts.c (vectorizable_condition): Support
EXTRACT_LAST_REDUCTION with fully-masked loops.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f46cc932a19..b7658e03628 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+ PR tree-optimization/92163
+ * gcc.dg/tree-ssa/pr92163.c: New test.
+
+2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
PR middle-end/91272
* gcc.target/aarch64/sve/clastb_1.c: Add dg-scan.
* gcc.target/aarch64/sve/clastb_2.c: Likewise.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr92163.c b/gcc/testsuite/gcc.dg/tree-ssa/pr92163.c
new file mode 100644
index 00000000000..58f548fe76b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr92163.c
@@ -0,0 +1,16 @@
+/* { dg-do "compile" } */
+/* { dg-options "-O2 -fexceptions -fnon-call-exceptions -fopenacc" } */
+
+void
+xr (int *k7)
+{
+ int qa;
+
+#pragma acc parallel
+#pragma acc loop vector
+ for (qa = 0; qa < 3; ++qa)
+ if (qa % 2 != 0)
+ k7[qa] = 0;
+ else
+ k7[qa] = 1;
+}
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index 25cd4709b31..21a15eef690 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -77,7 +77,6 @@ along with GCC; see the file COPYING3. If not see
fact, they are the same transformation applied to different views of
the CFG. */
-void delete_dead_or_redundant_assignment (gimple_stmt_iterator *, const char *);
static void delete_dead_or_redundant_call (gimple_stmt_iterator *, const char *);
/* Bitmap of blocks that have had EH statements cleaned. We should
@@ -639,7 +638,8 @@ dse_optimize_redundant_stores (gimple *stmt)
{
gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
if (is_gimple_assign (use_stmt))
- delete_dead_or_redundant_assignment (&gsi, "redundant");
+ delete_dead_or_redundant_assignment (&gsi, "redundant",
+ need_eh_cleanup);
else if (is_gimple_call (use_stmt))
delete_dead_or_redundant_call (&gsi, "redundant");
else
@@ -900,7 +900,8 @@ delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type)
/* Delete a dead store at GSI, which is a gimple assignment. */
void
-delete_dead_or_redundant_assignment (gimple_stmt_iterator *gsi, const char *type)
+delete_dead_or_redundant_assignment (gimple_stmt_iterator *gsi, const char *type,
+ bitmap need_eh_cleanup)
{
gimple *stmt = gsi_stmt (*gsi);
if (dump_file && (dump_flags & TDF_DETAILS))
@@ -915,7 +916,7 @@ delete_dead_or_redundant_assignment (gimple_stmt_iterator *gsi, const char *type
/* Remove the dead store. */
basic_block bb = gimple_bb (stmt);
- if (gsi_remove (gsi, true))
+ if (gsi_remove (gsi, true) && need_eh_cleanup)
bitmap_set_bit (need_eh_cleanup, bb->index);
/* And release any SSA_NAMEs set in this statement back to the
@@ -1059,7 +1060,7 @@ dse_dom_walker::dse_optimize_stmt (gimple_stmt_iterator *gsi)
&& !by_clobber_p)
return;
- delete_dead_or_redundant_assignment (gsi, "dead");
+ delete_dead_or_redundant_assignment (gsi, "dead", need_eh_cleanup);
}
}
diff --git a/gcc/tree-ssa-dse.h b/gcc/tree-ssa-dse.h
index a5eccbd746d..2658f92b1bb 100644
--- a/gcc/tree-ssa-dse.h
+++ b/gcc/tree-ssa-dse.h
@@ -31,6 +31,7 @@ enum dse_store_status
dse_store_status dse_classify_store (ao_ref *, gimple *, bool, sbitmap,
bool * = NULL, tree = NULL);
-void delete_dead_or_redundant_assignment (gimple_stmt_iterator *, const char *);
+void delete_dead_or_redundant_assignment (gimple_stmt_iterator *, const char *,
+ bitmap = NULL);
#endif /* GCC_TREE_SSA_DSE_H */