gimple-fold.h (gimple_fold_builtin): Remove.
authorRichard Biener <rguenther@suse.de>
Mon, 4 Aug 2014 13:08:34 +0000 (13:08 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 4 Aug 2014 13:08:34 +0000 (13:08 +0000)
2014-08-04  Richard Biener  <rguenther@suse.de>

* gimple-fold.h (gimple_fold_builtin): Remove.
* gimple-fold.c (gimple_fold_builtin): Make static.
* tree-ssa-ccp.c (pass_fold_builtins::execute): Use
fold_stmt, not gimple_fold_builtin.

From-SVN: r213585

gcc/ChangeLog
gcc/gimple-fold.c
gcc/gimple-fold.h
gcc/tree-ssa-ccp.c

index ea4c5cb..8dba640 100644 (file)
@@ -1,3 +1,10 @@
+2014-08-04  Richard Biener  <rguenther@suse.de>
+
+       * gimple-fold.h (gimple_fold_builtin): Remove.
+       * gimple-fold.c (gimple_fold_builtin): Make static.
+       * tree-ssa-ccp.c (pass_fold_builtins::execute): Use
+       fold_stmt, not gimple_fold_builtin.
+
 2014-08-04  Martin Liska <mliska@suse.cz>
 
        * cgraph.h (csi_end_p): Removed.
index 2e0f2bf..fa56810 100644 (file)
@@ -873,7 +873,7 @@ get_maxval_strlen (tree arg, tree *length, bitmap visited, int type)
    Note that some builtins expand into inline code that may not
    be valid in GIMPLE.  Callers must take care.  */
 
-tree
+static tree
 gimple_fold_builtin (gimple stmt)
 {
   tree result, val[3];
index 6b43066..9b4e456 100644 (file)
@@ -25,7 +25,6 @@ along with GCC; see the file COPYING3.  If not see
 extern tree canonicalize_constructor_val (tree, tree);
 extern tree get_symbol_constant_value (tree);
 extern void gimplify_and_update_call_from_tree (gimple_stmt_iterator *, tree);
-extern tree gimple_fold_builtin (gimple);
 extern bool fold_stmt (gimple_stmt_iterator *);
 extern bool fold_stmt_inplace (gimple_stmt_iterator *);
 extern tree maybe_fold_and_comparisons (enum tree_code, tree, tree, 
index 283bb12..a90f708 100644 (file)
@@ -2655,7 +2655,7 @@ pass_fold_builtins::execute (function *fun)
       for (i = gsi_start_bb (bb); !gsi_end_p (i); )
        {
           gimple stmt, old_stmt;
-         tree callee, result;
+         tree callee;
          enum built_in_function fcode;
 
          stmt = gsi_stmt (i);
@@ -2680,62 +2680,69 @@ pass_fold_builtins::execute (function *fun)
              gsi_next (&i);
              continue;
            }
+
          callee = gimple_call_fndecl (stmt);
          if (!callee || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL)
            {
              gsi_next (&i);
              continue;
            }
-         fcode = DECL_FUNCTION_CODE (callee);
-
-         result = gimple_fold_builtin (stmt);
 
-         if (result)
-           gimple_remove_stmt_histograms (fun, stmt);
+         fcode = DECL_FUNCTION_CODE (callee);
+         if (fold_stmt (&i))
+           ;
+         else
+           {
+             tree result = NULL_TREE;
+             switch (DECL_FUNCTION_CODE (callee))
+               {
+               case BUILT_IN_CONSTANT_P:
+                 /* Resolve __builtin_constant_p.  If it hasn't been
+                    folded to integer_one_node by now, it's fairly
+                    certain that the value simply isn't constant.  */
+                 result = integer_zero_node;
+                 break;
 
-         if (!result)
-           switch (DECL_FUNCTION_CODE (callee))
-             {
-             case BUILT_IN_CONSTANT_P:
-               /* Resolve __builtin_constant_p.  If it hasn't been
-                  folded to integer_one_node by now, it's fairly
-                  certain that the value simply isn't constant.  */
-                result = integer_zero_node;
-               break;
+               case BUILT_IN_ASSUME_ALIGNED:
+                 /* Remove __builtin_assume_aligned.  */
+                 result = gimple_call_arg (stmt, 0);
+                 break;
 
-             case BUILT_IN_ASSUME_ALIGNED:
-               /* Remove __builtin_assume_aligned.  */
-               result = gimple_call_arg (stmt, 0);
-               break;
+               case BUILT_IN_STACK_RESTORE:
+                 result = optimize_stack_restore (i);
+                 if (result)
+                   break;
+                 gsi_next (&i);
+                 continue;
 
-             case BUILT_IN_STACK_RESTORE:
-               result = optimize_stack_restore (i);
-               if (result)
+               case BUILT_IN_UNREACHABLE:
+                 if (optimize_unreachable (i))
+                   cfg_changed = true;
                  break;
-               gsi_next (&i);
-               continue;
 
-             case BUILT_IN_UNREACHABLE:
-               if (optimize_unreachable (i))
-                 cfg_changed = true;
-               break;
+               case BUILT_IN_VA_START:
+               case BUILT_IN_VA_END:
+               case BUILT_IN_VA_COPY:
+                 /* These shouldn't be folded before pass_stdarg.  */
+                 result = optimize_stdarg_builtin (stmt);
+                 if (result)
+                   break;
+                 /* FALLTHRU */
 
-             case BUILT_IN_VA_START:
-             case BUILT_IN_VA_END:
-             case BUILT_IN_VA_COPY:
-               /* These shouldn't be folded before pass_stdarg.  */
-               result = optimize_stdarg_builtin (stmt);
-               if (result)
-                 break;
-               /* FALLTHRU */
+               default:;
+               }
 
-             default:
-               gsi_next (&i);
-               continue;
-             }
+             if (!result)
+               {
+                 gsi_next (&i);
+                 continue;
+               }
 
-         if (result == NULL_TREE)
-           break;
+             if (!update_call_from_tree (&i, result))
+               gimplify_and_update_call_from_tree (&i, result);
+           }
+
+         todoflags |= TODO_update_address_taken;
 
          if (dump_file && (dump_flags & TDF_DETAILS))
            {
@@ -2744,12 +2751,6 @@ pass_fold_builtins::execute (function *fun)
            }
 
           old_stmt = stmt;
-          if (!update_call_from_tree (&i, result))
-           {
-             gimplify_and_update_call_from_tree (&i, result);
-             todoflags |= TODO_update_address_taken;
-           }
-
          stmt = gsi_stmt (i);
          update_stmt (stmt);