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:
parent
8ab5f5c9fa
commit
1c1205fb0b
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue