Commit b8610a53 by Nathan Sidwell Committed by Nathan Sidwell

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
parent 14492f0b
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; ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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);
} }
......
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