re PR rtl-optimization/17107 (Opportunity to improve code generated for complex logical expression)
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
This commit is contained in:
parent
14492f0b1e
commit
b8610a5376
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -4392,8 +4392,8 @@ fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2)
|
|||
|
||||
|
||||
|
||||
#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,6 +4653,7 @@ 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));
|
||||
|
||||
if (LOGICAL_OP_NON_SHORT_CIRCUIT)
|
||||
return build2 (code, truth_type, lhs, rhs);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue