Commit 4b0ab0d9 by Prathamesh Kulkarni Committed by Prathamesh Kulkarni

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
parent fa03d576
2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> 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 PR middle-end/91272
* tree-vect-stmts.c (vectorizable_condition): Support * tree-vect-stmts.c (vectorizable_condition): Support
EXTRACT_LAST_REDUCTION with fully-masked loops. EXTRACT_LAST_REDUCTION with fully-masked loops.
2019-10-28 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> 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 PR middle-end/91272
* gcc.target/aarch64/sve/clastb_1.c: Add dg-scan. * gcc.target/aarch64/sve/clastb_1.c: Add dg-scan.
* gcc.target/aarch64/sve/clastb_2.c: Likewise. * gcc.target/aarch64/sve/clastb_2.c: Likewise.
......
/* { 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;
}
...@@ -77,7 +77,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -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 fact, they are the same transformation applied to different views of
the CFG. */ 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 *); static void delete_dead_or_redundant_call (gimple_stmt_iterator *, const char *);
/* Bitmap of blocks that have had EH statements cleaned. We should /* Bitmap of blocks that have had EH statements cleaned. We should
...@@ -639,7 +638,8 @@ dse_optimize_redundant_stores (gimple *stmt) ...@@ -639,7 +638,8 @@ dse_optimize_redundant_stores (gimple *stmt)
{ {
gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt); gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
if (is_gimple_assign (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)) else if (is_gimple_call (use_stmt))
delete_dead_or_redundant_call (&gsi, "redundant"); delete_dead_or_redundant_call (&gsi, "redundant");
else else
...@@ -900,7 +900,8 @@ delete_dead_or_redundant_call (gimple_stmt_iterator *gsi, const char *type) ...@@ -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. */ /* Delete a dead store at GSI, which is a gimple assignment. */
void 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); gimple *stmt = gsi_stmt (*gsi);
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
...@@ -915,7 +916,7 @@ delete_dead_or_redundant_assignment (gimple_stmt_iterator *gsi, const char *type ...@@ -915,7 +916,7 @@ delete_dead_or_redundant_assignment (gimple_stmt_iterator *gsi, const char *type
/* Remove the dead store. */ /* Remove the dead store. */
basic_block bb = gimple_bb (stmt); 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); bitmap_set_bit (need_eh_cleanup, bb->index);
/* And release any SSA_NAMEs set in this statement back to the /* 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) ...@@ -1059,7 +1060,7 @@ dse_dom_walker::dse_optimize_stmt (gimple_stmt_iterator *gsi)
&& !by_clobber_p) && !by_clobber_p)
return; return;
delete_dead_or_redundant_assignment (gsi, "dead"); delete_dead_or_redundant_assignment (gsi, "dead", need_eh_cleanup);
} }
} }
......
...@@ -31,6 +31,7 @@ enum dse_store_status ...@@ -31,6 +31,7 @@ enum dse_store_status
dse_store_status dse_classify_store (ao_ref *, gimple *, bool, sbitmap, dse_store_status dse_classify_store (ao_ref *, gimple *, bool, sbitmap,
bool * = NULL, tree = NULL); 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 */ #endif /* GCC_TREE_SSA_DSE_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment