tree-chrec.c (chrec_fold_plus_1): Ensure we build binary operations with the correct types.

2005-06-02  Richard Guenther  <rguenth@gcc.gnu.org>

	* tree-chrec.c (chrec_fold_plus_1): Ensure we build
	binary operations with the correct types.
	* tree-ssa-loo-ivopts.c (idx_find_step): Use sizetype
	for all computation.

From-SVN: r100517
This commit is contained in:
Richard Guenther 2005-06-02 21:55:52 +00:00 committed by Richard Biener
parent 8ab5f5c9fa
commit 1c1205fb0b
3 changed files with 17 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2005-06-02 Richard Guenther <rguenth@gcc.gnu.org>
* tree-chrec.c (chrec_fold_plus_1): Ensure we build
binary operations with the correct types.
* tree-ssa-loo-ivopts.c (idx_find_step): Use sizetype
for all computation.
2005-06-02 Kazu Hirata <kazu@codesourcery.com>
* tree-vrp.c, config/arm/arm.md, config/arm/arm1020e.md,

View File

@ -293,7 +293,9 @@ chrec_fold_plus_1 (enum tree_code code,
&& size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE))
return build2 (code, type, op0, op1);
else if (size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE))
return fold_build2 (code, type, op0, op1);
return fold_build2 (code, type,
fold_convert (type, op0),
fold_convert (type, op1));
else
return chrec_dont_know;
}

View File

@ -1389,7 +1389,7 @@ idx_find_step (tree base, tree *idx, void *data)
{
struct ifs_ivopts_data *dta = data;
struct iv *iv;
tree step, type, iv_type, iv_step, lbound, off;
tree step, iv_step, lbound, off;
struct loop *loop = dta->ivopts_data->current_loop;
if (TREE_CODE (base) == MISALIGNED_INDIRECT_REF
@ -1430,8 +1430,6 @@ idx_find_step (tree base, tree *idx, void *data)
if (!iv->step)
return true;
iv_type = TREE_TYPE (iv->base);
type = build_pointer_type (TREE_TYPE (base));
if (TREE_CODE (base) == ARRAY_REF)
{
step = array_ref_element_size (base);
@ -1442,13 +1440,13 @@ idx_find_step (tree base, tree *idx, void *data)
}
else
/* The step for pointer arithmetics already is 1 byte. */
step = build_int_cst (type, 1);
step = build_int_cst (sizetype, 1);
if (TYPE_PRECISION (iv_type) < TYPE_PRECISION (type))
if (TYPE_PRECISION (TREE_TYPE (iv->base)) < TYPE_PRECISION (sizetype))
iv_step = can_count_iv_in_wider_type (dta->ivopts_data->current_loop,
type, iv->base, iv->step, dta->stmt);
sizetype, iv->base, iv->step, dta->stmt);
else
iv_step = fold_convert (iv_type, iv->step);
iv_step = fold_convert (sizetype, iv->step);
if (!iv_step)
{
@ -1456,12 +1454,12 @@ idx_find_step (tree base, tree *idx, void *data)
return false;
}
step = fold_build2 (MULT_EXPR, type, step, iv_step);
step = fold_build2 (MULT_EXPR, sizetype, step, iv_step);
if (!*dta->step_p)
*dta->step_p = step;
else
*dta->step_p = fold_build2 (PLUS_EXPR, type, *dta->step_p, step);
*dta->step_p = fold_build2 (PLUS_EXPR, sizetype, *dta->step_p, step);
return true;
}