summaryrefslogtreecommitdiff
path: root/gcc/tree-vect-transform.c
diff options
context:
space:
mode:
authorjsjodin <jsjodin@138bc75d-0d04-0410-961f-82ee72b054a4>2007-07-31 05:01:12 +0000
committerjsjodin <jsjodin@138bc75d-0d04-0410-961f-82ee72b054a4>2007-07-31 05:01:12 +0000
commita091367aded99e61c0b377476dfdb59243bf1f2f (patch)
treec042b23d4ab792a0cd2a13cdac53d198671cbdbd /gcc/tree-vect-transform.c
parente2b2d33b9da04846e8006b026b567c0da793a7eb (diff)
downloadgcc-a091367aded99e61c0b377476dfdb59243bf1f2f.tar.gz
2007-07-30 Jan Sjodin <jan.sjodin@amd.com>
* tree-data-ref.c (split_constant_offset): Enable split_constant_offset to extract constants from other statements. * tree-vect-transform.c (vect_create_addr_base_for_vector_ref): Generate data_ref_base to a temp var. Force base_offset to be simple. 2007-07-30 Jan Sjodin <jan.sjodin@amd.com> * gcc.dg/vect/vect-117.c: New test. * gcc.dg/vect/vect-74.c: Enabled test * gcc.dg/vect/vect-81.c: Enabled test git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127080 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-transform.c')
-rw-r--r--gcc/tree-vect-transform.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/tree-vect-transform.c b/gcc/tree-vect-transform.c
index 642437cbbdf..0965165e811 100644
--- a/gcc/tree-vect-transform.c
+++ b/gcc/tree-vect-transform.c
@@ -711,21 +711,32 @@ vect_create_addr_base_for_vector_ref (tree stmt,
{
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info);
- tree data_ref_base = unshare_expr (DR_BASE_ADDRESS (dr));
- tree base_name = build_fold_indirect_ref (data_ref_base);
+ tree data_ref_base_expr = unshare_expr (DR_BASE_ADDRESS (dr));
+ tree base_name = build_fold_indirect_ref (data_ref_base_expr);
+ tree data_ref_base_var;
+ tree data_ref_base;
+ tree new_base_stmt;
tree vec_stmt;
tree addr_base, addr_expr;
tree dest, new_stmt;
tree base_offset = unshare_expr (DR_OFFSET (dr));
tree init = unshare_expr (DR_INIT (dr));
tree vect_ptr_type, addr_expr2;
+
+
+ /* Create data_ref_base */
+ data_ref_base_var = create_tmp_var (TREE_TYPE (data_ref_base_expr), "batmp");
+ add_referenced_var (data_ref_base_var);
+ data_ref_base = force_gimple_operand (data_ref_base_expr, &new_base_stmt,
+ true, data_ref_base_var);
+ append_to_statement_list_force(new_base_stmt, new_stmt_list);
/* Create base_offset */
base_offset = size_binop (PLUS_EXPR, base_offset, init);
base_offset = fold_convert (sizetype, base_offset);
dest = create_tmp_var (TREE_TYPE (base_offset), "base_off");
add_referenced_var (dest);
- base_offset = force_gimple_operand (base_offset, &new_stmt, false, dest);
+ base_offset = force_gimple_operand (base_offset, &new_stmt, true, dest);
append_to_statement_list_force (new_stmt, new_stmt_list);
if (offset)