Commit 85e50b6b by David Edelsohn Committed by David Edelsohn

fold-const.c (fold_range_test): Use RANGE_TEST_NON_SHORT_CIRCUIT macro…

fold-const.c (fold_range_test): Use RANGE_TEST_NON_SHORT_CIRCUIT macro defaulting to original BRANCH_COST heuristic.

        * fold-const.c (fold_range_test): Use RANGE_TEST_NON_SHORT_CIRCUIT
        macro defaulting to original BRANCH_COST heuristic.
        * doc/tm.texi (RANGE_TEST_NON_SHORT_CIRCUIT): Document.

        * config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Define.

From-SVN: r65942
parent 256c249c
2003-04-22 David Edelsohn <edelsohn@gnu.org>
* fold-const.c (fold_range_test): Use RANGE_TEST_NON_SHORT_CIRCUIT
macro defaulting to original BRANCH_COST heuristic.
* doc/tm.texi (RANGE_TEST_NON_SHORT_CIRCUIT): Document.
* config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Define.
2003-04-22 Aldy Hernandez <aldyh@redhat.com> 2003-04-22 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/t-spe: Merge in t-fprules into file. * config/rs6000/t-spe: Merge in t-fprules into file.
......
...@@ -992,6 +992,10 @@ extern int rs6000_default_long_calls; ...@@ -992,6 +992,10 @@ extern int rs6000_default_long_calls;
#define BRANCH_COST 3 #define BRANCH_COST 3
/* Override BRANCH_COST heuristic which empirically produces worse
performance for fold_range_test(). */
#define RANGE_TEST_NON_SHORT_CIRCUIT 0
/* A fixed register used at prologue and epilogue generation to fix /* A fixed register used at prologue and epilogue generation to fix
addressing modes. The SPE needs heavy addressing fixes at the last addressing modes. The SPE needs heavy addressing fixes at the last
......
...@@ -5529,6 +5529,12 @@ function address than to call an address kept in a register. ...@@ -5529,6 +5529,12 @@ function address than to call an address kept in a register.
Define this macro if it is as good or better for a function to call Define this macro if it is as good or better for a function to call
itself with an explicit address than to call an address kept in a itself with an explicit address than to call an address kept in a
register. register.
@findex RANGE_TEST_NON_SHORT_CIRCUIT
@item RANGE_TEST_NON_SHORT_CIRCUIT
Define this macro if a non-short-circuit operation produced by
@samp{fold_range_test ()} is optimal. This macro defaults to true if
@code{BRANCH_COST} is greater than or equal to the value 2.
@end table @end table
@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, int @var{outer_code}, int *@var{total}) @deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, int @var{outer_code}, int *@var{total})
......
...@@ -3414,6 +3414,10 @@ merge_ranges (pin_p, plow, phigh, in0_p, low0, high0, in1_p, low1, high1) ...@@ -3414,6 +3414,10 @@ merge_ranges (pin_p, plow, phigh, in0_p, low0, high0, in1_p, low1, high1)
return 1; return 1;
} }
#ifndef RANGE_TEST_NON_SHORT_CIRCUIT
#define RANGE_TEST_NON_SHORT_CIRCUIT (BRANCH_COST >= 2)
#endif
/* EXP is some logical combination of boolean tests. See if we can /* EXP is some logical combination of boolean tests. See if we can
merge it into some range test. Return the new tree if so. */ merge it into some range test. Return the new tree if so. */
...@@ -3450,7 +3454,7 @@ fold_range_test (exp) ...@@ -3450,7 +3454,7 @@ fold_range_test (exp)
/* On machines where the branch cost is expensive, if this is a /* On machines where the branch cost is expensive, if this is a
short-circuited branch and the underlying object on both sides short-circuited branch and the underlying object on both sides
is the same, make a non-short-circuit operation. */ is the same, make a non-short-circuit operation. */
else if (BRANCH_COST >= 2 else if (RANGE_TEST_NON_SHORT_CIRCUIT
&& lhs != 0 && rhs != 0 && lhs != 0 && rhs != 0
&& (TREE_CODE (exp) == TRUTH_ANDIF_EXPR && (TREE_CODE (exp) == TRUTH_ANDIF_EXPR
|| TREE_CODE (exp) == TRUTH_ORIF_EXPR) || TREE_CODE (exp) == TRUTH_ORIF_EXPR)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment