re PR tree-optimization/19768 (ICE: SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set)

2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/19768
        * g++.dg/opt/pr19768.C: New test.

2005-02-03  Andrew Pinski  <pinskia@physics.uc.edu>

        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
This commit is contained in:
Andrew Pinski 2005-02-03 15:26:29 +00:00 committed by Andrew Pinski
parent da99298d7f
commit 9df935d878
4 changed files with 53 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2005-02-03 Andrew Pinski <pinskia@physics.uc.edu>
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 <pinskia@physics.uc.edu>
PR tree-opt/19736

View File

@ -1,3 +1,8 @@
2005-02-03 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/19768
* g++.dg/opt/pr19768.C: New test.
2005-02-03 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/19736

View File

@ -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();
}

View File

@ -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;
}
}
}