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:
Nathan Sidwell 2004-11-18 12:09:43 +00:00 committed by Nathan Sidwell
parent 14492f0b1e
commit b8610a5376
3 changed files with 17 additions and 6 deletions

View 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> 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

View File

@ -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

View File

@ -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);
} }