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>
|
2004-11-18 Uros Bizjak <uros@kss-loka.si>
|
||||||
|
|
||||||
* configure/i386/i386.md (*fix_trunch_1): Add "&& 1" to
|
* 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
|
#define BRANCH_COST 3
|
||||||
|
|
||||||
/* Override BRANCH_COST heuristic which empirically produces worse
|
/* 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
|
/* 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
|
||||||
|
|
|
@ -4392,8 +4392,8 @@ fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef RANGE_TEST_NON_SHORT_CIRCUIT
|
#ifndef LOGICAL_OP_NON_SHORT_CIRCUIT
|
||||||
#define RANGE_TEST_NON_SHORT_CIRCUIT (BRANCH_COST >= 2)
|
#define LOGICAL_OP_NON_SHORT_CIRCUIT (BRANCH_COST >= 2)
|
||||||
#endif
|
#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
|
||||||
|
@ -4431,7 +4431,7 @@ fold_range_test (tree 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 (RANGE_TEST_NON_SHORT_CIRCUIT
|
else if (LOGICAL_OP_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)
|
||||||
|
@ -4653,6 +4653,7 @@ fold_truthop (enum tree_code code, tree truth_type, tree lhs, tree rhs)
|
||||||
ll_arg, rl_arg),
|
ll_arg, rl_arg),
|
||||||
fold_convert (TREE_TYPE (ll_arg), integer_zero_node));
|
fold_convert (TREE_TYPE (ll_arg), integer_zero_node));
|
||||||
|
|
||||||
|
if (LOGICAL_OP_NON_SHORT_CIRCUIT)
|
||||||
return build2 (code, truth_type, lhs, rhs);
|
return build2 (code, truth_type, lhs, rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue