diff options
author | Dorit Naishlos <dorit@il.ibm.com> | 2004-11-23 09:19:24 +0000 |
---|---|---|
committer | Dorit Nuzman <dorit@gcc.gnu.org> | 2004-11-23 09:19:24 +0000 |
commit | e088c55299869b69d386771f29a5a5661d0bd5cf (patch) | |
tree | dc6359ab8002b825fad0caab609f525b5b0ef3e2 /gcc | |
parent | 00aca6e83ae577b520f810aaf7197c30c2eaf1a0 (diff) | |
download | gcc-e088c55299869b69d386771f29a5a5661d0bd5cf.zip gcc-e088c55299869b69d386771f29a5a5661d0bd5cf.tar.gz gcc-e088c55299869b69d386771f29a5a5661d0bd5cf.tar.bz2 |
re PR tree-optimization/18403 (FAILs to vectorize testcases on ppc64-linux)
PR tree-opt/18403
PR tree-opt/18505
* tree-vectorizer.c (vect_create_data_ref_ptr): Use
lang_hooks.types.type_for_size instead of integer_type_node for the
type of ptr_update.
From-SVN: r91081
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-vectorizer.c | 12 |
2 files changed, 19 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3a0b972..e5d3f12 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-11-23 Dorit Naishlos <dorit@il.ibm.com> + + PR tree-opt/18403 + PR tree-opt/18505 + * tree-vectorizer.c (vect_create_data_ref_ptr): Use + lang_hooks.types.type_for_size instead of integer_type_node for the + type of ptr_update. + 2004-11-23 Ralf Corsepius <ralf.corsepius@rtems.org> * config.gcc (h8300-*-rtems*): Use h8300/t-rtems. diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index b94ffa4..6164036 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -1866,6 +1866,7 @@ vect_create_data_ref_ptr (tree stmt, block_stmt_iterator *bsi, tree offset, tree vectype_size; tree ptr_update; tree data_ref_ptr; + tree type, tmp, size; base_name = unshare_expr (DR_BASE_NAME (dr)); if (vect_debug_details (NULL)) @@ -1952,11 +1953,20 @@ vect_create_data_ref_ptr (tree stmt, block_stmt_iterator *bsi, tree offset, idx = vect_create_index_for_vector_ref (loop, bsi); /* Create: update = idx * vectype_size */ - ptr_update = create_tmp_var (integer_type_node, "update"); + tmp = create_tmp_var (integer_type_node, "update"); + add_referenced_tmp_var (tmp); + size = TYPE_SIZE (vect_ptr_type); + type = lang_hooks.types.type_for_size (tree_low_cst (size, 1), 1); + ptr_update = create_tmp_var (type, "update"); add_referenced_tmp_var (ptr_update); vectype_size = build_int_cst (integer_type_node, GET_MODE_SIZE (TYPE_MODE (vectype))); vec_stmt = build2 (MULT_EXPR, integer_type_node, idx, vectype_size); + vec_stmt = build2 (MODIFY_EXPR, void_type_node, tmp, vec_stmt); + new_temp = make_ssa_name (tmp, vec_stmt); + TREE_OPERAND (vec_stmt, 0) = new_temp; + bsi_insert_before (bsi, vec_stmt, BSI_SAME_STMT); + vec_stmt = fold_convert (type, new_temp); vec_stmt = build2 (MODIFY_EXPR, void_type_node, ptr_update, vec_stmt); new_temp = make_ssa_name (ptr_update, vec_stmt); TREE_OPERAND (vec_stmt, 0) = new_temp; |