diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-12-03 23:35:39 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-12-03 23:35:39 +0100 |
commit | 36ad7922cbf93f3601ab81b6b4d332fddf575a9f (patch) | |
tree | 2d895fa1824f3bcdddf0dd88ec2b8c169f4f8c40 /gcc/tree-data-ref.c | |
parent | d56a25e1303343451091b473db4877e312b96c4b (diff) | |
download | gcc-36ad7922cbf93f3601ab81b6b4d332fddf575a9f.zip gcc-36ad7922cbf93f3601ab81b6b4d332fddf575a9f.tar.gz gcc-36ad7922cbf93f3601ab81b6b4d332fddf575a9f.tar.bz2 |
re PR tree-optimization/33453 (ICE in build2_stat, at tree.c:3110 with -ftree-parallelize-loops=4 -ftree-vectorize)
PR tree-optimization/33453
* tree-data-ref.c (split_constant_offset): Use POINTER_PLUS_EXPR
for pointer addition.
* tree-parloops.c (canonicalize_loop_ivs): Likewise.
(separate_decls_in_loop_name): Copy DECL_GIMPLE_REG_P from var to
var_copy.
* gcc.c-torture/compile/20071203-1.c: New test.
From-SVN: r130588
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r-- | gcc/tree-data-ref.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 8d9c4c9..89a0039 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -555,9 +555,12 @@ split_constant_offset (tree exp, tree *var, tree *off) { split_constant_offset (poffset, &poffset, &off1); off0 = size_binop (PLUS_EXPR, off0, off1); - base = fold_build2 (PLUS_EXPR, TREE_TYPE (base), - base, - fold_convert (TREE_TYPE (base), poffset)); + if (POINTER_TYPE_P (TREE_TYPE (base))) + base = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), + base, fold_convert (sizetype, poffset)); + else + base = fold_build2 (PLUS_EXPR, TREE_TYPE (base), base, + fold_convert (TREE_TYPE (base), poffset)); } var0 = fold_convert (type, base); |