fold-const.c (fold_build_cleanup_point_expr): For a RETURN_EXPR...

2004-12-28  Andrew Pinski  <pinskia@physics.uc.edu>

        * fold-const.c (fold_build_cleanup_point_expr): For a RETURN_EXPR,
        we only need a cleanup point expression when the expression on the
        left hand side of the MODIFIY_EXPR inside the return has side
        effects.

From-SVN: r92672
This commit is contained in:
Andrew Pinski 2004-12-28 15:56:51 +00:00 committed by Andrew Pinski
parent 2b0729bafa
commit 0e256a822b
2 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2004-12-28 Andrew Pinski <pinskia@physics.uc.edu>
* fold-const.c (fold_build_cleanup_point_expr): For a RETURN_EXPR,
we only need a cleanup point expression when the expression on the
left hand side of the MODIFIY_EXPR inside the return has side
effects.
2004-12-28 Dorit Naishlos <dorit@il.ibm.com>
* tree-vectorizer.c (vect_mark_relevant) First argument changed from

View File

@ -10783,6 +10783,21 @@ fold_build_cleanup_point_expr (tree type, tree expr)
it with a cleanup point expression. */
if (!TREE_SIDE_EFFECTS (expr))
return expr;
/* If the expression is a return, check to see if the expression inside the
return has no side effects or the right hand side of the modify expression
inside the return. If either don't have side effects set we don't need to
wrap the expression in a cleanup point expression. Note we don't check the
left hand side of the modify because it should always be a return decl. */
if (TREE_CODE (expr) == RETURN_EXPR)
{
tree op = TREE_OPERAND (expr, 0);
if (!op || !TREE_SIDE_EFFECTS (op))
return expr;
op = TREE_OPERAND (op, 1);
if (!TREE_SIDE_EFFECTS (op))
return expr;
}
return build1 (CLEANUP_POINT_EXPR, type, expr);
}