ipa-inline-analysis.c (will_be_nonconstant_predicate): Consider return values of...
authorJan Hubicka <hubicka@ucw.cz>
Tue, 16 Dec 2014 22:16:17 +0000 (23:16 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 16 Dec 2014 22:16:17 +0000 (22:16 +0000)
* ipa-inline-analysis.c (will_be_nonconstant_predicate): Consider
return values of const calls as constants.
(estimate_function_body_sizes): Expect calls to have false predicates.

From-SVN: r218796

gcc/ChangeLog
gcc/ipa-inline-analysis.c

index b8009b181906ea65fbf64ba857f253e9eb4d718e..da10096480462a38dcf97853a9d1a02eea3a21ee 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-16  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa-inline-analysis.c (will_be_nonconstant_predicate): Consider
+       return values of const calls as constants.
+       (estimate_function_body_sizes): Expect calls to have false predicates.
+
 2014-12-16  Jan Hubicka  <hubicka@ucw.cz>
 
        * hwint.c (abs_hwi, absu_hwi): Move to ...
index fb4e81ebba44bd701ff99fdca55f4a8b10151851..3b622f2f0e40d32daaca8bf29ab28e084c6d1b37 100644 (file)
@@ -2036,12 +2036,12 @@ will_be_nonconstant_predicate (struct ipa_node_params *info,
   struct agg_position_info aggpos;
 
   /* What statments might be optimized away
-     when their arguments are constant
-     TODO: also trivial builtins.
-     builtin_constant_p is already handled later.  */
+     when their arguments are constant.  */
   if (gimple_code (stmt) != GIMPLE_ASSIGN
       && gimple_code (stmt) != GIMPLE_COND
-      && gimple_code (stmt) != GIMPLE_SWITCH)
+      && gimple_code (stmt) != GIMPLE_SWITCH
+      && (gimple_code (stmt) != GIMPLE_CALL
+         || !(gimple_call_flags (stmt) & ECF_CONST)))
     return p;
 
   /* Stores will stay anyway.  */
@@ -2101,9 +2101,10 @@ will_be_nonconstant_predicate (struct ipa_node_params *info,
        p = nonconstant_names[SSA_NAME_VERSION (use)];
       op_non_const = or_predicates (summary->conds, &p, &op_non_const);
     }
-  if (gimple_code (stmt) == GIMPLE_ASSIGN
-      && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME)
-    nonconstant_names[SSA_NAME_VERSION (gimple_assign_lhs (stmt))]
+  if ((gimple_code (stmt) == GIMPLE_ASSIGN || gimple_code (stmt) == GIMPLE_CALL)
+      && gimple_op (stmt, 0)
+      && TREE_CODE (gimple_op (stmt, 0)) == SSA_NAME)
+    nonconstant_names[SSA_NAME_VERSION (gimple_op (stmt, 0))]
       = op_non_const;
   return op_non_const;
 }
@@ -2683,7 +2684,9 @@ estimate_function_body_sizes (struct cgraph_node *node, bool early)
              else
                p = true_predicate ();
 
-             if (!false_predicate_p (&p))
+             if (!false_predicate_p (&p)
+                 || (is_gimple_call (stmt)
+                     && !false_predicate_p (&bb_predicate)))
                {
                  time += this_time;
                  size += this_size;