diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-02-10 09:47:32 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-02-10 09:47:32 +0100 |
commit | 6139a3b76c3f149f17d7415d84633cbe617ed72b (patch) | |
tree | 5ed54be4c26c2dbbc0f9cd78abd2cb3424f83e90 /gcc/tree-ssa-reassoc.c | |
parent | e8f45b6c351690c258365525904d7dd0c0e9104f (diff) | |
download | gcc-6139a3b76c3f149f17d7415d84633cbe617ed72b.zip gcc-6139a3b76c3f149f17d7415d84633cbe617ed72b.tar.gz gcc-6139a3b76c3f149f17d7415d84633cbe617ed72b.tar.bz2 |
re PR tree-optimization/79411 (ICE: SSA corruption (fail_abnormal_edge_coalesce))
PR tree-optimization/79411
* tree-ssa-reassoc.c (is_reassociable_op): Return false if
stmt operands are SSA_NAMEs used in abnormal phis.
(can_reassociate_p): Return false if op is SSA_NAME used in abnormal
phis.
* gcc.c-torture/compile/pr79411.c: New test.
From-SVN: r245324
Diffstat (limited to 'gcc/tree-ssa-reassoc.c')
-rw-r--r-- | gcc/tree-ssa-reassoc.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 4a796f4..36ef86c 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -605,7 +605,18 @@ is_reassociable_op (gimple *stmt, enum tree_code code, struct loop *loop) if (is_gimple_assign (stmt) && gimple_assign_rhs_code (stmt) == code && has_single_use (gimple_assign_lhs (stmt))) - return true; + { + tree rhs1 = gimple_assign_rhs1 (stmt); + tree rhs2 = gimple_assign_rhs1 (stmt); + if (TREE_CODE (rhs1) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs1)) + return false; + if (rhs2 + && TREE_CODE (rhs2) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs2)) + return false; + return true; + } return false; } @@ -4989,6 +5000,8 @@ static bool can_reassociate_p (tree op) { tree type = TREE_TYPE (op); + if (TREE_CODE (op) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op)) + return false; if ((ANY_INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_WRAPS (type)) || NON_SAT_FIXED_POINT_TYPE_P (type) || (flag_associative_math && FLOAT_TYPE_P (type))) |