tree-affine.c (add_elt_to_tree): Avoid converting all pointer arithmetic to sizetype.
2013-09-02 Richard Biener <rguenther@suse.de> * tree-affine.c (add_elt_to_tree): Avoid converting all pointer arithmetic to sizetype. * gcc.dg/tree-ssa/loop-4.c: Adjust scan looking for one memory reference. From-SVN: r202165
This commit is contained in:
parent
85ff4ec649
commit
78de2333ea
|
@ -1,3 +1,8 @@
|
|||
2013-09-02 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-affine.c (add_elt_to_tree): Avoid converting all pointer
|
||||
arithmetic to sizetype.
|
||||
|
||||
2013-09-02 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* tree-ssa-loop-ivopts.c (set_autoinc_for_original_candidates):
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2013-09-02 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gcc.dg/tree-ssa/loop-4.c: Adjust scan looking for one memory
|
||||
reference.
|
||||
|
||||
2013-09-02 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* gcc.target/arm/ivopts-orig_biv-inc.c: New testcase.
|
||||
|
|
|
@ -37,7 +37,7 @@ void xxx(void)
|
|||
|
||||
/* { dg-final { scan-tree-dump-times " \\* \[^\\n\\r\]*=" 0 "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump-times "\[^\\n\\r\]*= \\* " 0 "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump-times "MEM" 1 "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump-times " MEM" 1 "optimized" } } */
|
||||
|
||||
/* And the original induction variable should be eliminated. */
|
||||
|
||||
|
|
|
@ -377,35 +377,46 @@ add_elt_to_tree (tree expr, tree type, tree elt, double_int scale,
|
|||
type1 = sizetype;
|
||||
|
||||
scale = double_int_ext_for_comb (scale, comb);
|
||||
elt = fold_convert (type1, elt);
|
||||
|
||||
if (scale.is_minus_one ()
|
||||
&& POINTER_TYPE_P (TREE_TYPE (elt)))
|
||||
{
|
||||
elt = fold_build1 (NEGATE_EXPR, sizetype, convert_to_ptrofftype (elt));
|
||||
scale = double_int_one;
|
||||
}
|
||||
|
||||
if (scale.is_one ())
|
||||
{
|
||||
if (!expr)
|
||||
return fold_convert (type, elt);
|
||||
return elt;
|
||||
|
||||
if (POINTER_TYPE_P (type))
|
||||
return fold_build_pointer_plus (expr, elt);
|
||||
return fold_build2 (PLUS_EXPR, type, expr, elt);
|
||||
if (POINTER_TYPE_P (TREE_TYPE (expr)))
|
||||
return fold_build_pointer_plus (expr, convert_to_ptrofftype (elt));
|
||||
if (POINTER_TYPE_P (TREE_TYPE (elt)))
|
||||
return fold_build_pointer_plus (elt, convert_to_ptrofftype (expr));
|
||||
return fold_build2 (PLUS_EXPR, type1,
|
||||
fold_convert (type1, expr),
|
||||
fold_convert (type1, elt));
|
||||
}
|
||||
|
||||
if (scale.is_minus_one ())
|
||||
{
|
||||
if (!expr)
|
||||
return fold_convert (type, fold_build1 (NEGATE_EXPR, type1, elt));
|
||||
return fold_build1 (NEGATE_EXPR, TREE_TYPE (elt), elt);
|
||||
|
||||
if (POINTER_TYPE_P (type))
|
||||
{
|
||||
elt = fold_build1 (NEGATE_EXPR, type1, elt);
|
||||
return fold_build_pointer_plus (expr, elt);
|
||||
}
|
||||
return fold_build2 (MINUS_EXPR, type, expr, elt);
|
||||
if (POINTER_TYPE_P (TREE_TYPE (expr)))
|
||||
return fold_build_pointer_plus
|
||||
(expr, convert_to_ptrofftype
|
||||
(fold_build1 (NEGATE_EXPR, TREE_TYPE (elt), elt)));
|
||||
return fold_build2 (MINUS_EXPR, type1,
|
||||
fold_convert (type1, expr),
|
||||
fold_convert (type1, elt));
|
||||
}
|
||||
|
||||
elt = fold_convert (type1, elt);
|
||||
if (!expr)
|
||||
return fold_convert (type,
|
||||
fold_build2 (MULT_EXPR, type1, elt,
|
||||
double_int_to_tree (type1, scale)));
|
||||
return fold_build2 (MULT_EXPR, type1, elt,
|
||||
double_int_to_tree (type1, scale));
|
||||
|
||||
if (scale.is_negative ())
|
||||
{
|
||||
|
@ -417,13 +428,14 @@ add_elt_to_tree (tree expr, tree type, tree elt, double_int scale,
|
|||
|
||||
elt = fold_build2 (MULT_EXPR, type1, elt,
|
||||
double_int_to_tree (type1, scale));
|
||||
if (POINTER_TYPE_P (type))
|
||||
if (POINTER_TYPE_P (TREE_TYPE (expr)))
|
||||
{
|
||||
if (code == MINUS_EXPR)
|
||||
elt = fold_build1 (NEGATE_EXPR, type1, elt);
|
||||
return fold_build_pointer_plus (expr, elt);
|
||||
}
|
||||
return fold_build2 (code, type, expr, elt);
|
||||
return fold_build2 (code, type1,
|
||||
fold_convert (type1, expr), elt);
|
||||
}
|
||||
|
||||
/* Makes tree from the affine combination COMB. */
|
||||
|
|
Loading…
Reference in New Issue