diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-01-21 22:51:43 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-01-21 22:51:43 +0100 |
commit | 6c5ed3f18ce31e71dc1089e8298c70fd2a0a08c2 (patch) | |
tree | 12c988528c2bd3478ee358c3b7dbeff55a67e4da /gcc/dse.c | |
parent | 31be63ab8c4def775c9ece0b6fa8d0fedc11bae4 (diff) | |
download | gcc-6c5ed3f18ce31e71dc1089e8298c70fd2a0a08c2.zip gcc-6c5ed3f18ce31e71dc1089e8298c70fd2a0a08c2.tar.gz gcc-6c5ed3f18ce31e71dc1089e8298c70fd2a0a08c2.tar.bz2 |
re PR rtl-optimization/62078 (ICE: verify_flow_info failed: missing REG_EH_REGION note at the end of bb 2 with -fdelete-dead-exceptions)
PR rtl-optimization/62078
* dse.c: Include cfgcleanup.h.
(rest_of_handle_dse): For -fnon-call-exceptions, if DSE removed
anything call purge_all_dead_edges and cleanup_cfg at the end
of the pass.
* g++.dg/opt/pr62078.C: New test.
From-SVN: r219970
Diffstat (limited to 'gcc/dse.c')
-rw-r--r-- | gcc/dse.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -81,6 +81,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple.h" #include "gimple-ssa.h" #include "rtl-iter.h" +#include "cfgcleanup.h" /* This file contains three techniques for performing Dead Store Elimination (dse). @@ -3746,6 +3747,14 @@ rest_of_handle_dse (void) if (dump_file) fprintf (dump_file, "dse: local deletions = %d, global deletions = %d, spill deletions = %d\n", locally_deleted, globally_deleted, spill_deleted); + + /* DSE can eliminate potentially-trapping MEMs. + Remove any EH edges associated with them. */ + if ((locally_deleted || globally_deleted) + && cfun->can_throw_non_call_exceptions + && purge_all_dead_edges ()) + cleanup_cfg (0); + return 0; } |