aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-stmts.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-07-08 10:51:46 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-07-08 10:51:46 +0000
commit20ede5c64d71cb0fb25a445f93752c7e6e861dba (patch)
tree4b2f3b444ba0daa29aed751a241ee827c39679dd /gcc/tree-vect-stmts.c
parent80edb36cfdf779f56fb5a5c001df4dfecaeb25b2 (diff)
downloadgcc-20ede5c64d71cb0fb25a445f93752c7e6e861dba.zip
gcc-20ede5c64d71cb0fb25a445f93752c7e6e861dba.tar.gz
gcc-20ede5c64d71cb0fb25a445f93752c7e6e861dba.tar.bz2
re PR tree-optimization/44861 (internal compiler error: in vectorizable_load, at tree-vect-stmts.c:3812)
2010-07-08 Richard Guenther <rguenther@suse.de> PR tree-optimization/44861 * tree-vect-stmts.c (vectorizable_store): Preserve TBAA information when building MEM_REFs. (vectorizable_load): Likewise. * tree-vect-data-refs.c (vect_setup_realignment): Likewise. * g++.dg/vect/pr44861.cc: New testcase. From-SVN: r161949
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r--gcc/tree-vect-stmts.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index bf63161..bf9ae73 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -3360,7 +3360,10 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
vec_oprnd = VEC_index (tree, result_chain, i);
if (aligned_access_p (first_dr))
- data_ref = build_simple_mem_ref (dataref_ptr);
+ data_ref
+ = build2 (MEM_REF, TREE_TYPE (vec_oprnd), dataref_ptr,
+ build_int_cst (reference_alias_ptr_type
+ (DR_REF (first_dr)), 0));
else
{
int mis = DR_MISALIGNMENT (first_dr);
@@ -3738,7 +3741,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
{
case dr_aligned:
gcc_assert (aligned_access_p (first_dr));
- data_ref = build_simple_mem_ref (dataref_ptr);
+ data_ref
+ = build2 (MEM_REF, vectype, dataref_ptr,
+ build_int_cst (reference_alias_ptr_type
+ (DR_REF (first_dr)), 0));
break;
case dr_unaligned_supported:
{
@@ -3769,7 +3775,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
ptr = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
gimple_assign_set_lhs (new_stmt, ptr);
vect_finish_stmt_generation (stmt, new_stmt, gsi);
- data_ref = build_simple_mem_ref (ptr);
+ data_ref
+ = build2 (MEM_REF, vectype, ptr,
+ build_int_cst (reference_alias_ptr_type
+ (DR_REF (first_dr)), 0));
vec_dest = vect_create_destination_var (scalar_dest, vectype);
new_stmt = gimple_build_assign (vec_dest, data_ref);
new_temp = make_ssa_name (vec_dest, new_stmt);
@@ -3790,7 +3799,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
ptr = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
gimple_assign_set_lhs (new_stmt, ptr);
vect_finish_stmt_generation (stmt, new_stmt, gsi);
- data_ref = build_simple_mem_ref (ptr);
+ data_ref
+ = build2 (MEM_REF, vectype, ptr,
+ build_int_cst (reference_alias_ptr_type
+ (DR_REF (first_dr)), 0));
break;
}
case dr_explicit_realign_optimized:
@@ -3802,7 +3814,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
new_temp = make_ssa_name (SSA_NAME_VAR (dataref_ptr), new_stmt);
gimple_assign_set_lhs (new_stmt, new_temp);
vect_finish_stmt_generation (stmt, new_stmt, gsi);
- data_ref = build_simple_mem_ref (new_temp);
+ data_ref
+ = build2 (MEM_REF, vectype, new_temp,
+ build_int_cst (reference_alias_ptr_type
+ (DR_REF (first_dr)), 0));
break;
default:
gcc_unreachable ();