diff options
author | Richard Biener <rguenther@suse.de> | 2017-05-12 10:54:29 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-05-12 10:54:29 +0000 |
commit | 53e788d00c62e4430ed77f65ad669b8c60e69420 (patch) | |
tree | 472a2bbcccd0aaf65c3b199dc33e708277edea3f /gcc/tree-ssa-pre.c | |
parent | 2ead1ab91123d2af20dac4dfa551355dacfef00d (diff) | |
download | gcc-53e788d00c62e4430ed77f65ad669b8c60e69420.zip gcc-53e788d00c62e4430ed77f65ad669b8c60e69420.tar.gz gcc-53e788d00c62e4430ed77f65ad669b8c60e69420.tar.bz2 |
re PR tree-optimization/80713 (recent crash in update_dep_bb)
2017-05-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/80713
* tree-ssa-pre.c (remove_dead_inserted_code): Clear
inserted_exprs bit for not removed stmts.
* gcc.dg/torture/pr80713.c: New testcase.
From-SVN: r247963
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 38723df..c7062b7 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4947,8 +4947,14 @@ remove_dead_inserted_code (void) } } + unsigned int to_clear = -1U; EXECUTE_IF_SET_IN_BITMAP (inserted_exprs, 0, i, bi) { + if (to_clear != -1U) + { + bitmap_clear_bit (inserted_exprs, to_clear); + to_clear = -1U; + } t = SSA_NAME_DEF_STMT (ssa_name (i)); if (!gimple_plf (t, NECESSARY)) { @@ -4969,7 +4975,14 @@ remove_dead_inserted_code (void) release_defs (t); } } + else + /* eliminate_fini will skip stmts marked for removal if we + already removed it and uses inserted_exprs for this, so + clear those we didn't end up removing. */ + to_clear = i; } + if (to_clear != -1U) + bitmap_clear_bit (inserted_exprs, to_clear); BITMAP_FREE (worklist); } |