Commit 1c1205fb by Richard Guenther Committed by Richard Biener

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
parent 8ab5f5c9
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> 2005-06-02 Kazu Hirata <kazu@codesourcery.com>
* tree-vrp.c, config/arm/arm.md, config/arm/arm1020e.md, * tree-vrp.c, config/arm/arm.md, config/arm/arm1020e.md,
......
...@@ -293,7 +293,9 @@ chrec_fold_plus_1 (enum tree_code code, ...@@ -293,7 +293,9 @@ chrec_fold_plus_1 (enum tree_code code,
&& size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE)) && size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE))
return build2 (code, type, op0, op1); return build2 (code, type, op0, op1);
else if (size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE)) 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 else
return chrec_dont_know; return chrec_dont_know;
} }
......
...@@ -1389,7 +1389,7 @@ idx_find_step (tree base, tree *idx, void *data) ...@@ -1389,7 +1389,7 @@ idx_find_step (tree base, tree *idx, void *data)
{ {
struct ifs_ivopts_data *dta = data; struct ifs_ivopts_data *dta = data;
struct iv *iv; 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; struct loop *loop = dta->ivopts_data->current_loop;
if (TREE_CODE (base) == MISALIGNED_INDIRECT_REF if (TREE_CODE (base) == MISALIGNED_INDIRECT_REF
...@@ -1430,8 +1430,6 @@ idx_find_step (tree base, tree *idx, void *data) ...@@ -1430,8 +1430,6 @@ idx_find_step (tree base, tree *idx, void *data)
if (!iv->step) if (!iv->step)
return true; return true;
iv_type = TREE_TYPE (iv->base);
type = build_pointer_type (TREE_TYPE (base));
if (TREE_CODE (base) == ARRAY_REF) if (TREE_CODE (base) == ARRAY_REF)
{ {
step = array_ref_element_size (base); step = array_ref_element_size (base);
...@@ -1442,13 +1440,13 @@ idx_find_step (tree base, tree *idx, void *data) ...@@ -1442,13 +1440,13 @@ idx_find_step (tree base, tree *idx, void *data)
} }
else else
/* The step for pointer arithmetics already is 1 byte. */ /* 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, 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 else
iv_step = fold_convert (iv_type, iv->step); iv_step = fold_convert (sizetype, iv->step);
if (!iv_step) if (!iv_step)
{ {
...@@ -1456,12 +1454,12 @@ idx_find_step (tree base, tree *idx, void *data) ...@@ -1456,12 +1454,12 @@ idx_find_step (tree base, tree *idx, void *data)
return false; return false;
} }
step = fold_build2 (MULT_EXPR, type, step, iv_step); step = fold_build2 (MULT_EXPR, sizetype, step, iv_step);
if (!*dta->step_p) if (!*dta->step_p)
*dta->step_p = step; *dta->step_p = step;
else 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; return true;
} }
......
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