re PR tree-optimization/32527 (ICE in build2_stat, at tree.c:3074)
2007-07-30 Andrew Pinski <andrew_pinski@playstation.sony.com> PR tree-opt/32527 * tree-affine.h (aff_tree): The type of rest is sizetype for types of pointers. * tree-affine.c (aff_combination_scale): If type is a pointer type, use sizetype for rest. (aff_combination_add_elt): Likewise. Don't specialize pointer types. (aff_combination_convert): Don't convert rest for pointer types. From-SVN: r127058
This commit is contained in:
parent
cef44ee25f
commit
5c24ddaf36
3 changed files with 20 additions and 12 deletions
|
@ -1,3 +1,13 @@
|
|||
2007-07-30 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR tree-opt/32527
|
||||
* tree-affine.h (aff_tree): The type of rest is sizetype for types
|
||||
of pointers.
|
||||
* tree-affine.c (aff_combination_scale): If type is a pointer type,
|
||||
use sizetype for rest.
|
||||
(aff_combination_add_elt): Likewise. Don't specialize pointer types.
|
||||
(aff_combination_convert): Don't convert rest for pointer types.
|
||||
|
||||
2007-07-28 Daniel Berlin <dberlin@dberlin.org>
|
||||
|
||||
* Makefile.in (tree-ssa-alias.o): Add alloc-pool.h
|
||||
|
|
|
@ -110,6 +110,9 @@ aff_combination_scale (aff_tree *comb, double_int scale)
|
|||
|
||||
if (comb->rest)
|
||||
{
|
||||
tree type = comb->type;
|
||||
if (POINTER_TYPE_P (type))
|
||||
type = sizetype;
|
||||
if (comb->n < MAX_AFF_ELTS)
|
||||
{
|
||||
comb->elts[comb->n].coef = scale;
|
||||
|
@ -118,8 +121,8 @@ aff_combination_scale (aff_tree *comb, double_int scale)
|
|||
comb->n++;
|
||||
}
|
||||
else
|
||||
comb->rest = fold_build2 (MULT_EXPR, comb->type, comb->rest,
|
||||
double_int_to_tree (comb->type, scale));
|
||||
comb->rest = fold_build2 (MULT_EXPR, type, comb->rest,
|
||||
double_int_to_tree (type, scale));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -181,14 +184,8 @@ aff_combination_add_elt (aff_tree *comb, tree elt, double_int scale)
|
|||
double_int_to_tree (type, scale));
|
||||
|
||||
if (comb->rest)
|
||||
{
|
||||
if (POINTER_TYPE_P (comb->type))
|
||||
comb->rest = fold_build2 (POINTER_PLUS_EXPR, comb->type,
|
||||
comb->rest, elt);
|
||||
else
|
||||
comb->rest = fold_build2 (PLUS_EXPR, comb->type, comb->rest,
|
||||
elt);
|
||||
}
|
||||
comb->rest = fold_build2 (PLUS_EXPR, type, comb->rest,
|
||||
elt);
|
||||
else
|
||||
comb->rest = elt;
|
||||
}
|
||||
|
@ -231,7 +228,7 @@ aff_combination_convert (aff_tree *comb, tree type)
|
|||
}
|
||||
|
||||
comb->type = type;
|
||||
if (comb->rest)
|
||||
if (comb->rest && !POINTER_TYPE_P (type))
|
||||
comb->rest = fold_convert (type, comb->rest);
|
||||
|
||||
if (TYPE_PRECISION (type) == TYPE_PRECISION (comb_type))
|
||||
|
|
|
@ -53,7 +53,8 @@ typedef struct affine_tree_combination
|
|||
struct aff_comb_elt elts[MAX_AFF_ELTS];
|
||||
|
||||
/* Remainder of the expression. Usually NULL, used only if there are more
|
||||
than MAX_AFF_ELTS elements. Type of REST must be TYPE. */
|
||||
than MAX_AFF_ELTS elements. Type of REST will be either sizetype for
|
||||
TYPE of POINTER_TYPEs or TYPE. */
|
||||
tree rest;
|
||||
} aff_tree;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue