aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2010-09-22 11:02:48 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2010-09-22 11:02:48 +0200
commit23c1da7a37b3ecc21b08d8e0817c5aa4518a3ee9 (patch)
tree2ea764041949a2f4043cbec62d6f434cbe999a89 /gcc/gimple-fold.c
parentbbaee6884c50803d33995317c3e7531c70383552 (diff)
downloadgcc-23c1da7a37b3ecc21b08d8e0817c5aa4518a3ee9.zip
gcc-23c1da7a37b3ecc21b08d8e0817c5aa4518a3ee9.tar.gz
gcc-23c1da7a37b3ecc21b08d8e0817c5aa4518a3ee9.tar.bz2
gimple-fold.c (fold_gimple_call): New parameter inplace, do not fold builtins if it is true.
2010-09-22 Martin Jambor <mjambor@suse.cz> * 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
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 896f508..8bad08d 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: