diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-04-16 10:24:47 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-04-16 10:24:47 +0200 |
commit | 41b5808d56c2f4c98cf783b13d97b775f59f123c (patch) | |
tree | 212872291e47b07d629097936e07b6e9f7822816 /gcc/tree-ssa-math-opts.c | |
parent | 8c996ec644d4dfa8d067f822ba63b3e4a3a17ef8 (diff) | |
download | gcc-41b5808d56c2f4c98cf783b13d97b775f59f123c.zip gcc-41b5808d56c2f4c98cf783b13d97b775f59f123c.tar.gz gcc-41b5808d56c2f4c98cf783b13d97b775f59f123c.tar.bz2 |
re PR tree-optimization/90090 (ICE in mark_reachable_handlers, at tree-eh.c:3938 since r219202)
PR tree-optimization/90090
* tree-ssa-math-opts.c (is_division_by): Ignore divisions that can
throw internally.
(is_division_by_square): Likewise. Formatting fix.
* g++.dg/opt/pr90090.C: New test.
From-SVN: r270379
Diffstat (limited to 'gcc/tree-ssa-math-opts.c')
-rw-r--r-- | gcc/tree-ssa-math-opts.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index 1496520..b7bbde4 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -334,7 +334,8 @@ is_division_by (gimple *use_stmt, tree def) /* Do not recognize x / x as valid division, as we are getting confused later by replacing all immediate uses x in such a stmt. */ - && gimple_assign_rhs1 (use_stmt) != def; + && gimple_assign_rhs1 (use_stmt) != def + && !stmt_can_throw_internal (cfun, use_stmt); } /* Return TRUE if USE_STMT is a multiplication of DEF by A. */ @@ -367,13 +368,12 @@ is_division_by_square (gimple *use_stmt, tree def) { if (gimple_code (use_stmt) == GIMPLE_ASSIGN && gimple_assign_rhs_code (use_stmt) == RDIV_EXPR - && gimple_assign_rhs1 (use_stmt) != gimple_assign_rhs2 (use_stmt)) + && gimple_assign_rhs1 (use_stmt) != gimple_assign_rhs2 (use_stmt) + && !stmt_can_throw_internal (cfun, use_stmt)) { tree denominator = gimple_assign_rhs2 (use_stmt); if (TREE_CODE (denominator) == SSA_NAME) - { - return is_square_of (SSA_NAME_DEF_STMT (denominator), def); - } + return is_square_of (SSA_NAME_DEF_STMT (denominator), def); } return 0; } |