re PR rtl-optimization/17107 (Opportunity to improve code generated for complex logic...
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 18 Nov 2004 12:09:43 +0000 (12:09 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 18 Nov 2004 12:09:43 +0000 (12:09 +0000)
PR target/17107
* fold-const.c (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
(LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.
(fold_range_test): Adjust.
(fold_truthop): Use it.
* config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
(LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.

From-SVN: r90857

gcc/ChangeLog
gcc/config/rs6000/rs6000.h
gcc/fold-const.c

index fdde9c221ce48b5f2e166e2d8ae2a5fb383a2ee5..4766d4ac507aa37302f958948d5792c32bc846f8 100644 (file)
@@ -1,3 +1,13 @@
+2004-11-18  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR target/17107
+       * fold-const.c (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
+       (LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.
+       (fold_range_test): Adjust.
+       (fold_truthop): Use it.
+       * config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
+       (LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.
+
 2004-11-18  Uros Bizjak  <uros@kss-loka.si>
 
         * configure/i386/i386.md (*fix_trunch_1): Add "&& 1" to
index 1b74db8080a2dc9cbd1d7e3c482f217d05e3a52b..912f40eee909b2ccfa84d00bc19f94749d6c1593 100644 (file)
@@ -1096,9 +1096,9 @@ extern const char *rs6000_warn_altivec_long_switch;
 #define BRANCH_COST 3
 
 /* Override BRANCH_COST heuristic which empirically produces worse
-   performance for fold_range_test().  */
+   performance for removing short circuiting from the logical ops.  */
 
-#define RANGE_TEST_NON_SHORT_CIRCUIT 0
+#define LOGICAL_OP_NON_SHORT_CIRCUIT 0
 
 /* A fixed register used at prologue and epilogue generation to fix
    addressing modes.  The SPE needs heavy addressing fixes at the last
index 0d2e407692678c2d27c5afe78618347ff209cfa4..0c1a3d587c577396628d0acc3b6df2b4374e60fd 100644 (file)
@@ -4392,8 +4392,8 @@ fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2)
 
 
 \f
-#ifndef RANGE_TEST_NON_SHORT_CIRCUIT
-#define RANGE_TEST_NON_SHORT_CIRCUIT (BRANCH_COST >= 2)
+#ifndef LOGICAL_OP_NON_SHORT_CIRCUIT
+#define LOGICAL_OP_NON_SHORT_CIRCUIT (BRANCH_COST >= 2)
 #endif
 
 /* EXP is some logical combination of boolean tests.  See if we can
@@ -4431,7 +4431,7 @@ fold_range_test (tree exp)
   /* On machines where the branch cost is expensive, if this is a
      short-circuited branch and the underlying object on both sides
      is the same, make a non-short-circuit operation.  */
-  else if (RANGE_TEST_NON_SHORT_CIRCUIT
+  else if (LOGICAL_OP_NON_SHORT_CIRCUIT
           && lhs != 0 && rhs != 0
           && (TREE_CODE (exp) == TRUTH_ANDIF_EXPR
               || TREE_CODE (exp) == TRUTH_ORIF_EXPR)
@@ -4653,7 +4653,8 @@ fold_truthop (enum tree_code code, tree truth_type, tree lhs, tree rhs)
                               ll_arg, rl_arg),
                       fold_convert (TREE_TYPE (ll_arg), integer_zero_node));
 
-      return build2 (code, truth_type, lhs, rhs);
+      if (LOGICAL_OP_NON_SHORT_CIRCUIT)
+       return build2 (code, truth_type, lhs, rhs);
     }
 
   /* See if the comparisons can be merged.  Then get all the parameters for