tree-ssa-loop-niter.c (assert_loop_rolls_lt): Convert the operands of compare to the same type.

* tree-ssa-loop-niter.c (assert_loop_rolls_lt): Convert the operands
	of compare to the same type.
	* cfgloopmanip.c (add_loop): Update information about loop exits.
	(loop_version): Remove the innermost loop requirement.
	* tree-ssa-loop-manip.c (determine_exit_conditions): Convert bounds
	to sizetype for pointers.

From-SVN: r126796
This commit is contained in:
Zdenek Dvorak 2007-07-20 03:29:43 +02:00 committed by Zdenek Dvorak
parent 9143267b21
commit d24a32a186
4 changed files with 31 additions and 9 deletions

View File

@ -1,3 +1,12 @@
2007-07-20 Zdenek Dvorak <dvorakz@suse.cz>
* tree-ssa-loop-niter.c (assert_loop_rolls_lt): Convert the operands
of compare to the same type.
* cfgloopmanip.c (add_loop): Update information about loop exits.
(loop_version): Remove the innermost loop requirement.
* tree-ssa-loop-manip.c (determine_exit_conditions): Convert bounds
to sizetype for pointers.
2007-07-18 H.J. Lu <hongjiu.lu@intel.com> 2007-07-18 H.J. Lu <hongjiu.lu@intel.com>
* Makefile.in (D32PBIT_FUNCS): Add _sd_to_tf and _tf_to_sd. * Makefile.in (D32PBIT_FUNCS): Add _sd_to_tf and _tf_to_sd.

View File

@ -411,6 +411,8 @@ add_loop (struct loop *loop, struct loop *outer)
basic_block *bbs; basic_block *bbs;
int i, n; int i, n;
struct loop *subloop; struct loop *subloop;
edge e;
edge_iterator ei;
/* Add it to loop structure. */ /* Add it to loop structure. */
place_new_loop (loop); place_new_loop (loop);
@ -441,6 +443,15 @@ add_loop (struct loop *loop, struct loop *outer)
} }
} }
/* Update the information about loop exit edges. */
for (i = 0; i < n; i++)
{
FOR_EACH_EDGE (e, ei, bbs[i]->succs)
{
rescan_loop_exit (e, false, false);
}
}
free (bbs); free (bbs);
} }
@ -1283,10 +1294,6 @@ loop_version (struct loop *loop,
struct loop *nloop; struct loop *nloop;
basic_block cond_bb; basic_block cond_bb;
/* CHECKME: Loop versioning does not handle nested loop at this point. */
if (loop->inner)
return NULL;
/* Record entry and latch edges for the loop */ /* Record entry and latch edges for the loop */
entry = loop_preheader_edge (loop); entry = loop_preheader_edge (loop);
irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP; irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;

View File

@ -670,13 +670,17 @@ determine_exit_conditions (struct loop *loop, struct tree_niter_desc *desc,
tree base = desc->control.base; tree base = desc->control.base;
tree step = desc->control.step; tree step = desc->control.step;
tree bound = desc->bound; tree bound = desc->bound;
tree type = TREE_TYPE (base); tree type = TREE_TYPE (step);
tree bigstep, delta; tree bigstep, delta;
tree min = lower_bound_in_type (type, type); tree min = lower_bound_in_type (type, type);
tree max = upper_bound_in_type (type, type); tree max = upper_bound_in_type (type, type);
enum tree_code cmp = desc->cmp; enum tree_code cmp = desc->cmp;
tree cond = boolean_true_node, assum; tree cond = boolean_true_node, assum;
/* For pointers, do the arithmetics in the type of step (sizetype). */
base = fold_convert (type, base);
bound = fold_convert (type, bound);
*enter_cond = boolean_false_node; *enter_cond = boolean_false_node;
*exit_base = NULL_TREE; *exit_base = NULL_TREE;
*exit_step = NULL_TREE; *exit_step = NULL_TREE;

View File

@ -918,8 +918,9 @@ assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
/* And then we can compute iv0->base - diff, and compare it with /* And then we can compute iv0->base - diff, and compare it with
iv1->base. */ iv1->base. */
mbzl = fold_build2 (MINUS_EXPR, type1, iv0->base, diff); mbzl = fold_build2 (MINUS_EXPR, type1,
mbzr = iv1->base; fold_convert (type1, iv0->base), diff);
mbzr = fold_convert (type1, iv1->base);
} }
else else
{ {
@ -934,8 +935,9 @@ assert_loop_rolls_lt (tree type, affine_iv *iv0, affine_iv *iv1,
iv1->base, bound); iv1->base, bound);
} }
mbzl = iv0->base; mbzl = fold_convert (type1, iv0->base);
mbzr = fold_build2 (MINUS_EXPR, type1, iv1->base, diff); mbzr = fold_build2 (MINUS_EXPR, type1,
fold_convert (type1, iv1->base), diff);
} }
if (!integer_nonzerop (assumption)) if (!integer_nonzerop (assumption))