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:
parent
9143267b21
commit
d24a32a186
@ -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.
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user