]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gimple-fold.c (fold_gimple_call): New parameter inplace, do not fold builtins if...
authorMartin Jambor <mjambor@suse.cz>
Wed, 22 Sep 2010 09:02:48 +0000 (11:02 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Wed, 22 Sep 2010 09:02:48 +0000 (11:02 +0200)
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

gcc/ChangeLog
gcc/gimple-fold.c

index 50f27a3ad18f7158d4e7496504e116dc4a3d81fe..b4111eb5c1733c0e2f21975f87bfce6e8b32d152 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2010-09-22  Martin Jambor  <mjambor@suse.cz>
 
        * tree-sra.c (struct access): New field grp_no_warning.
index 896f508045d77dba7f80cc9ff2899ba60ef5d841..8bad08d567a8efdfb6fc23ed577fd94c667c1cbe 100644 (file)
@@ -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: