tree-ssa-loop-ivopts.c (find_bivs, [...]): Apply expand_simple_operations to bases of the ivs.

* tree-ssa-loop-ivopts.c (find_bivs, find_givs_in_stmt_scev): Apply
	expand_simple_operations to bases of the ivs.
	(tree_int_cst_sign_bit): Export.
	* tree-flow.h (expand_simple_operations): Declare.
	* tree-ssa-loop-niter.c (number_of_iterations_cond): Use
	tree_int_cst_sign_bit.
	(expand_simple_operations): Export.
	* tree.h (tree_int_cst_sign_bit): Declare.

From-SVN: r99853
This commit is contained in:
Zdenek Dvorak 2005-05-17 22:02:56 +02:00 committed by Zdenek Dvorak
parent 98273e5afb
commit d7bf3bcf99
5 changed files with 20 additions and 5 deletions

View File

@ -1,3 +1,14 @@
2005-05-17 Zdenek Dvorak <dvorakz@suse.cz>
* tree-ssa-loop-ivopts.c (find_bivs, find_givs_in_stmt_scev): Apply
expand_simple_operations to bases of the ivs.
(tree_int_cst_sign_bit): Export.
* tree-flow.h (expand_simple_operations): Declare.
* tree-ssa-loop-niter.c (number_of_iterations_cond): Use
tree_int_cst_sign_bit.
(expand_simple_operations): Export.
* tree.h (tree_int_cst_sign_bit): Declare.
2005-05-17 Zdenek Dvorak <dvorakz@suse.cz>
* tree-cfg.c (tree_can_merge_blocks_p): Allow phi nodes in the

View File

@ -725,6 +725,7 @@ bool tree_duplicate_loop_to_header_edge (struct loop *, edge, struct loops *,
unsigned int *, int);
struct loop *tree_ssa_loop_version (struct loops *, struct loop *, tree,
basic_block *);
tree expand_simple_operations (tree);
/* In tree-ssa-loop-im.c */
/* The possibilities of statement movement. */

View File

@ -992,6 +992,7 @@ find_bivs (struct ivopts_data *data)
continue;
base = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop));
base = expand_simple_operations (base);
if (contains_abnormal_ssa_name_p (base)
|| contains_abnormal_ssa_name_p (step))
continue;
@ -1062,6 +1063,7 @@ find_givs_in_stmt_scev (struct ivopts_data *data, tree stmt,
if (!simple_iv (loop, stmt, TREE_OPERAND (stmt, 1), base, step, true))
return false;
*base = expand_simple_operations (*base);
if (contains_abnormal_ssa_name_p (*base)
|| contains_abnormal_ssa_name_p (*step))
@ -2536,7 +2538,7 @@ var_at_stmt (struct loop *loop, struct iv_cand *cand, tree stmt)
/* Return the most significant (sign) bit of T. Similar to tree_int_cst_msb,
but the bit is determined from TYPE_PRECISION, not MODE_BITSIZE. */
static int
int
tree_int_cst_sign_bit (tree t)
{
unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;

View File

@ -189,10 +189,10 @@ number_of_iterations_cond (tree type, tree base0, tree step0,
/* Ignore loops of while (i-- < 10) type. */
if (code != NE_EXPR)
{
if (step0 && !tree_expr_nonnegative_p (step0))
if (step0 && tree_int_cst_sign_bit (step0))
return;
if (!zero_p (step1) && tree_expr_nonnegative_p (step1))
if (!zero_p (step1) && !tree_int_cst_sign_bit (step1))
return;
}
@ -366,7 +366,7 @@ number_of_iterations_cond (tree type, tree base0, tree step0,
if (!zero_p (step1))
step0 = fold_unary_to_constant (NEGATE_EXPR, type, step1);
step1 = NULL_TREE;
if (!tree_expr_nonnegative_p (fold_convert (signed_niter_type, step0)))
if (tree_int_cst_sign_bit (fold_convert (signed_niter_type, step0)))
{
step0 = fold_unary_to_constant (NEGATE_EXPR, type, step0);
base1 = fold_build1 (NEGATE_EXPR, type, base1);
@ -627,7 +627,7 @@ simplify_replace_tree (tree expr, tree old, tree new)
/* Expand definitions of ssa names in EXPR as long as they are simple
enough, and return the new expression. */
static tree
tree
expand_simple_operations (tree expr)
{
unsigned i, n;

View File

@ -2953,6 +2953,7 @@ extern int host_integerp (tree, int);
extern HOST_WIDE_INT tree_low_cst (tree, int);
extern int tree_int_cst_msb (tree);
extern int tree_int_cst_sgn (tree);
extern int tree_int_cst_sign_bit (tree);
extern int tree_expr_nonnegative_p (tree);
extern bool may_negate_without_overflow_p (tree);
extern tree get_inner_array_type (tree);