diff options
author | Richard Guenther <rguenther@suse.de> | 2011-01-14 13:20:22 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-01-14 13:20:22 +0000 |
commit | 0fdb0d27c2dbfa8fffddf95a6df3822a771b0ffb (patch) | |
tree | 416da2ccce41a8bb452b079c2b37c89a1abdc2dd /gcc/tree-ssa-forwprop.c | |
parent | 35385f991f052ff58476c64ed62b09751e55e31a (diff) | |
download | gcc-0fdb0d27c2dbfa8fffddf95a6df3822a771b0ffb.zip gcc-0fdb0d27c2dbfa8fffddf95a6df3822a771b0ffb.tar.gz gcc-0fdb0d27c2dbfa8fffddf95a6df3822a771b0ffb.tar.bz2 |
re PR tree-optimization/47280 (ICE: verify_stmts failed: statement marked for throw, but doesn't with -fnon-call-exceptions -ftrapv)
2011-01-14 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47280
* tree-ssa-forwprop.c (associate_plusminus): Cleanup EH and
return CFG changes.
(tree_ssa_forward_propagate_single_use_vars): Deal with
CFG changes from associate_plusminus.
* g++.dg/opt/pr47280.C: New testcase.
From-SVN: r168784
Diffstat (limited to 'gcc/tree-ssa-forwprop.c')
-rw-r--r-- | gcc/tree-ssa-forwprop.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index f68395a..64c8e88 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -1658,9 +1658,9 @@ simplify_bitwise_and (gimple_stmt_iterator *gsi, gimple stmt) /* Perform re-associations of the plus or minus statement STMT that are - always permitted. */ + always permitted. Returns true if the CFG was changed. */ -static void +static bool associate_plusminus (gimple stmt) { tree rhs1 = gimple_assign_rhs1 (stmt); @@ -1671,7 +1671,7 @@ associate_plusminus (gimple stmt) /* We can't reassociate at all for saturating types. */ if (TYPE_SATURATING (TREE_TYPE (rhs1))) - return; + return false; /* First contract negates. */ do @@ -1934,7 +1934,12 @@ out: { fold_stmt_inplace (stmt); update_stmt (stmt); + if (maybe_clean_or_replace_eh_stmt (stmt, stmt) + && gimple_purge_dead_eh_edges (gimple_bb (stmt))) + return true; } + + return false; } /* Main entry point for the forward propagation optimizer. */ @@ -2062,7 +2067,7 @@ tree_ssa_forward_propagate_single_use_vars (void) else if (gimple_assign_rhs_code (stmt) == PLUS_EXPR || gimple_assign_rhs_code (stmt) == MINUS_EXPR) { - associate_plusminus (stmt); + cfg_changed |= associate_plusminus (stmt); gsi_next (&gsi); } else |