2014-04-14 Richard Biener <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Apr 2014 11:48:22 +0000 (11:48 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Apr 2014 11:48:22 +0000 (11:48 +0000)
* tree-switch-conversion.c (lshift_cheap_p): Get speed_p
as argument.
(expand_switch_using_bit_tests_p): Likewise.
(process_switch): Compute and pass on speed_p based on the
switch stmt.
* tree-ssa-math-opts.c (gimple_expand_builtin_pow): Use
optimize_bb_for_speed_p.

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

gcc/ChangeLog
gcc/tree-ssa-math-opts.c
gcc/tree-switch-conversion.c

index e3e4180..61e0e21 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-14  Richard Biener  <rguenther@suse.de>
+
+       * tree-switch-conversion.c (lshift_cheap_p): Get speed_p
+       as argument.
+       (expand_switch_using_bit_tests_p): Likewise.
+       (process_switch): Compute and pass on speed_p based on the
+       switch stmt.
+       * tree-ssa-math-opts.c (gimple_expand_builtin_pow): Use
+       optimize_bb_for_speed_p.
+
 2014-04-14  Eric Botcazou  <ebotcazou@adacore.com>
 
        * cfgloop.h (struct loop): Rename force_vect into force_vectorize.
index 9ff857c..63aba8e 100644 (file)
@@ -1162,7 +1162,7 @@ gimple_expand_builtin_pow (gimple_stmt_iterator *gsi, location_t loc,
   if (c_is_int
       && ((n >= -1 && n <= 2)
          || (flag_unsafe_math_optimizations
-             && optimize_insn_for_speed_p ()
+             && optimize_bb_for_speed_p (gsi_bb (*gsi))
              && powi_cost (n) <= POWI_MAX_MULTS)))
     return gimple_expand_builtin_powi (gsi, loc, arg0, n);
 
index 547ac9e..5540ed3 100644 (file)
@@ -130,21 +130,18 @@ hoist_edge_and_branch_if_true (gimple_stmt_iterator *gsip,
    This function (and similar RTL-related cost code in e.g. IVOPTS) should
    be moved to some kind of interface file for GIMPLE/RTL interactions.  */
 static bool
-lshift_cheap_p (void)
+lshift_cheap_p (bool speed_p)
 {
   /* FIXME: This should be made target dependent via this "this_target"
      mechanism, similar to e.g. can_copy_init_p in gcse.c.  */
   static bool init[2] = {false, false};
   static bool cheap[2] = {true, true};
-  bool speed_p;
 
   /* If the targer has no lshift in word_mode, the operation will most
      probably not be cheap.  ??? Does GCC even work for such targets?  */
   if (optab_handler (ashl_optab, word_mode) == CODE_FOR_nothing)
     return false;
 
-  speed_p = optimize_insn_for_speed_p ();
-
   if (!init[speed_p])
     {
       rtx reg = gen_raw_REG (word_mode, 10000);
@@ -165,12 +162,12 @@ lshift_cheap_p (void)
 static bool
 expand_switch_using_bit_tests_p (tree range,
                                 unsigned int uniq,
-                                unsigned int count)
+                                unsigned int count, bool speed_p)
 {
   return (((uniq == 1 && count >= 3)
           || (uniq == 2 && count >= 5)
           || (uniq == 3 && count >= 6))
-         && lshift_cheap_p ()
+         && lshift_cheap_p (speed_p)
          && compare_tree_int (range, GET_MODE_BITSIZE (word_mode)) < 0
          && compare_tree_int (range, 0) > 0);
 }
@@ -1357,7 +1354,9 @@ process_switch (gimple swtch)
   if (info.uniq <= MAX_CASE_BIT_TESTS)
     {
       if (expand_switch_using_bit_tests_p (info.range_size,
-                                          info.uniq, info.count))
+                                          info.uniq, info.count,
+                                          optimize_bb_for_speed_p
+                                            (gimple_bb (swtch))))
        {
          if (dump_file)
            fputs ("  expanding as bit test is preferable\n", dump_file);