+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>
* config/rs6000/t-spe: Merge in t-fprules into file.
#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
addressing modes. The SPE needs heavy addressing fixes at the last
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
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
@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, int @var{code}, int @var{outer_code}, int *@var{total})
return 1;
}
\f
+#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
merge it into some range test. Return the new tree if so. */
/* 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 (BRANCH_COST >= 2
+ else if (RANGE_TEST_NON_SHORT_CIRCUIT
&& lhs != 0 && rhs != 0
&& (TREE_CODE (exp) == TRUTH_ANDIF_EXPR
|| TREE_CODE (exp) == TRUTH_ORIF_EXPR)