From: Andrew Pinski Date: Thu, 3 Feb 2005 15:26:29 +0000 (+0000) Subject: re PR tree-optimization/19768 (ICE: SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set) X-Git-Tag: releases/gcc-4.0.0~1066 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9df935d878e5d92552ba1cb2b1ceacecef69f53f;p=thirdparty%2Fgcc.git re PR tree-optimization/19768 (ICE: SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set) 2005-02-03 Andrew Pinski PR tree-opt/19768 * g++.dg/opt/pr19768.C: New test. 2005-02-03 Andrew Pinski PR tree-opt/19768 * tree-ssa-dse.c (fix_phi_uses): Update the occurs in abnormal phi flag if the phi is abnormal. From-SVN: r94660 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0561fd03c8b..c7b41ad29ef1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-02-03 Andrew Pinski + + PR tree-opt/19768 + * tree-ssa-dse.c (fix_phi_uses): Update the occurs in abnormal + phi flag if the phi is abnormal. + 2005-02-03 Andrew Pinski PR tree-opt/19736 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 32e8ecbefd90..608b077b2337 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-02-03 Andrew Pinski + + PR tree-opt/19768 + * g++.dg/opt/pr19768.C: New test. + 2005-02-03 Andrew Pinski PR tree-opt/19736 diff --git a/gcc/testsuite/g++.dg/opt/pr19768.C b/gcc/testsuite/g++.dg/opt/pr19768.C new file mode 100644 index 000000000000..376ca9938421 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr19768.C @@ -0,0 +1,29 @@ +// PR tree-opt/19768 +// tree DSE was removing one store to LL.currentLevel +// but forgot that since the vop was in an abnormal PHI +// that we have to update the SSA_NAME which we propagate +// into the abnormal PHI + +// { dg-do compile } +// { dg-options "-O" } + +struct LeveLogger +{ + int currentLevel; +}; +extern LeveLogger LL; +struct gg +{ + ~gg ( void ) + { LL.currentLevel = 1; } +}; +void f(void); +void g ( void ) +{ + gg sll; + { + gg sll; + f(); + } + f(); +} diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c index 5d29e03a70dc..625e1d1fa8fb 100644 --- a/gcc/tree-ssa-dse.c +++ b/gcc/tree-ssa-dse.c @@ -134,7 +134,13 @@ fix_phi_uses (tree phi, tree stmt) def_operand_p def_p; ssa_op_iter iter; int i; - + edge e; + edge_iterator ei; + + FOR_EACH_EDGE (e, ei, PHI_BB (phi)->preds) + if (e->flags & EDGE_ABNORMAL) + break; + get_stmt_operands (stmt); FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter) @@ -146,7 +152,12 @@ fix_phi_uses (tree phi, tree stmt) them with the appropriate V_MAY_DEF_OP. */ for (i = 0; i < PHI_NUM_ARGS (phi); i++) if (v_may_def == PHI_ARG_DEF (phi, i)) - SET_PHI_ARG_DEF (phi, i, v_may_use); + { + SET_PHI_ARG_DEF (phi, i, v_may_use); + /* Update if the new phi argument is an abnormal phi. */ + if (e != NULL) + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (v_may_use) = 1; + } } }