From 4b0ab0d9588f6c63f7102e70de52684cdda49de8 Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Mon, 28 Oct 2019 15:01:24 +0000 Subject: [PATCH] re PR tree-optimization/92163 (ICE: Segmentation fault (in bitmap_set_bit)) 2019-10-28 Prathamesh Kulkarni 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 --- gcc/ChangeLog | 11 +++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/tree-ssa/pr92163.c | 16 ++++++++++++++++ gcc/tree-ssa-dse.c | 11 ++++++----- gcc/tree-ssa-dse.h | 3 ++- 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr92163.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f3410ebf730..aa9c489b176 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2019-10-28 Prathamesh Kulkarni + + 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 PR middle-end/91272 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f46cc932a19..b7658e03628 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-10-28 Prathamesh Kulkarni + + PR tree-optimization/92163 + * gcc.dg/tree-ssa/pr92163.c: New test. + 2019-10-28 Prathamesh Kulkarni PR middle-end/91272 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 */ -- 2.30.2