Commit 9df935d8 by Andrew Pinski Committed by Andrew Pinski

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
parent da99298d
2005-02-03 Andrew Pinski <pinskia@physics.uc.edu> 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 PR tree-opt/19736
* tree-ssa.c (replace_immediate_uses): Update the immediate_uses * tree-ssa.c (replace_immediate_uses): Update the immediate_uses
information for the new statement. information for the new statement.
......
2005-02-03 Andrew Pinski <pinskia@physics.uc.edu> 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 PR tree-opt/19736
* gcc.c-torture/compile/pr19736.c: New test. * gcc.c-torture/compile/pr19736.c: New test.
......
// 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();
}
...@@ -134,7 +134,13 @@ fix_phi_uses (tree phi, tree stmt) ...@@ -134,7 +134,13 @@ fix_phi_uses (tree phi, tree stmt)
def_operand_p def_p; def_operand_p def_p;
ssa_op_iter iter; ssa_op_iter iter;
int i; 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); get_stmt_operands (stmt);
FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter) FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
...@@ -146,7 +152,12 @@ fix_phi_uses (tree phi, tree stmt) ...@@ -146,7 +152,12 @@ fix_phi_uses (tree phi, tree stmt)
them with the appropriate V_MAY_DEF_OP. */ them with the appropriate V_MAY_DEF_OP. */
for (i = 0; i < PHI_NUM_ARGS (phi); i++) for (i = 0; i < PHI_NUM_ARGS (phi); i++)
if (v_may_def == PHI_ARG_DEF (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;
}
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment