OSDN Git Service

2011-04-06 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Apr 2011 08:56:28 +0000 (08:56 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Apr 2011 08:56:28 +0000 (08:56 +0000)
* tree-inline.c (estimate_num_insns): For calls simply account
for all passed arguments and a used return value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@172024 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-inline.c

index 7b473e8..24207ac 100644 (file)
@@ -1,4 +1,9 @@
 2011-04-06  Richard Guenther  <rguenther@suse.de>
+
+       * tree-inline.c (estimate_num_insns): For calls simply account
+       for all passed arguments and a used return value.
+
+2011-04-06  Richard Guenther  <rguenther@suse.de>
  
        PR tree-optimization/47663
        * cgraph.h (struct cgraph_edge): Add call_stmt_size and
index a6dac2d..b4f9dcd 100644 (file)
@@ -3470,12 +3470,6 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
     case GIMPLE_CALL:
       {
        tree decl = gimple_call_fndecl (stmt);
-       tree addr = gimple_call_fn (stmt);
-       tree funtype = TREE_TYPE (addr);
-       bool stdarg = false;
-
-       if (POINTER_TYPE_P (funtype))
-         funtype = TREE_TYPE (funtype);
 
        /* Do not special case builtins where we see the body.
           This just confuse inliner.  */
@@ -3511,49 +3505,13 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
          }
 
        cost = weights->call_cost;
-       if (decl)
-         funtype = TREE_TYPE (decl);
-
-       if (!VOID_TYPE_P (TREE_TYPE (funtype))
-           && gimple_call_lhs (stmt))
-         cost += estimate_move_cost (TREE_TYPE (funtype));
-
-       if (funtype)
-         stdarg = stdarg_p (funtype);
-
-       /* Our cost must be kept in sync with
-          cgraph_estimate_size_after_inlining that does use function
-          declaration to figure out the arguments.
-
-          For functions taking variable list of arguments we must
-          look into call statement intself.  This is safe because
-          we will get only higher costs and in most cases we will
-          not inline these anyway.  */
-       if (decl && DECL_ARGUMENTS (decl) && !stdarg)
-         {
-           tree arg;
-           for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
-             if (!VOID_TYPE_P (TREE_TYPE (arg)))
-               cost += estimate_move_cost (TREE_TYPE (arg));
-         }
-       else if (funtype && prototype_p (funtype) && !stdarg)
-         {
-           tree t;
-           for (t = TYPE_ARG_TYPES (funtype); t && t != void_list_node;
-                t = TREE_CHAIN (t))
-             if (!VOID_TYPE_P (TREE_VALUE (t)))
-               cost += estimate_move_cost (TREE_VALUE (t));
-         }
-       else
+       if (gimple_call_lhs (stmt))
+         cost += estimate_move_cost (TREE_TYPE (gimple_call_lhs (stmt)));
+       for (i = 0; i < gimple_call_num_args (stmt); i++)
          {
-           for (i = 0; i < gimple_call_num_args (stmt); i++)
-             {
-               tree arg = gimple_call_arg (stmt, i);
-               if (!VOID_TYPE_P (TREE_TYPE (arg)))
-                 cost += estimate_move_cost (TREE_TYPE (arg));
-             }
+           tree arg = gimple_call_arg (stmt, i);
+           cost += estimate_move_cost (TREE_TYPE (arg));
          }
-
        break;
       }