From 23c1da7a37b3ecc21b08d8e0817c5aa4518a3ee9 Mon Sep 17 00:00:00 2001 From: Martin Jambor Date: Wed, 22 Sep 2010 11:02:48 +0200 Subject: [PATCH] gimple-fold.c (fold_gimple_call): New parameter inplace, do not fold builtins if it is true. 2010-09-22 Martin Jambor * gimple-fold.c (fold_gimple_call): New parameter inplace, do not fold builtins if it is true. (fold_stmt_1): Call, fold_gimple_call always, pass inplace as a parameter. From-SVN: r164517 --- gcc/ChangeLog | 7 +++++++ gcc/gimple-fold.c | 9 +++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 50f27a3ad18..b4111eb5c17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-09-22 Martin Jambor + + * gimple-fold.c (fold_gimple_call): New parameter inplace, do not fold + builtins if it is true. + (fold_stmt_1): Call, fold_gimple_call always, pass inplace as a + parameter. + 2010-09-22 Martin Jambor * tree-sra.c (struct access): New field grp_no_warning. diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 896f508045d..8bad08d567a 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -1486,7 +1486,7 @@ gimple_fold_obj_type_ref (tree ref, tree known_type) It is assumed that the operands have been previously folded. */ static bool -fold_gimple_call (gimple_stmt_iterator *gsi) +fold_gimple_call (gimple_stmt_iterator *gsi, bool inplace) { gimple stmt = gsi_stmt (*gsi); @@ -1494,7 +1494,7 @@ fold_gimple_call (gimple_stmt_iterator *gsi) /* Check for builtins that CCP can handle using information not available in the generic fold routines. */ - if (callee && DECL_BUILT_IN (callee)) + if (!inplace && callee && DECL_BUILT_IN (callee)) { tree result = gimple_fold_builtin (stmt); @@ -1511,7 +1511,6 @@ fold_gimple_call (gimple_stmt_iterator *gsi) there requires that we create a new CALL_EXPR, and that requires copying EH region info to the new node. Easier to just do it here where we can just smash the call operand. */ - /* ??? Is there a good reason not to do this in fold_stmt_inplace? */ callee = gimple_call_fn (stmt); if (TREE_CODE (callee) == OBJ_TYPE_REF && TREE_CODE (OBJ_TYPE_REF_OBJECT (callee)) == ADDR_EXPR) @@ -1578,9 +1577,7 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace) changed = true; } } - /* The entire statement may be replaced in this case. */ - if (!inplace) - changed |= fold_gimple_call (gsi); + changed |= fold_gimple_call (gsi, inplace); break; case GIMPLE_ASM: