diff options
author | jsjodin <jsjodin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-31 05:01:12 +0000 |
---|---|---|
committer | jsjodin <jsjodin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-31 05:01:12 +0000 |
commit | a091367aded99e61c0b377476dfdb59243bf1f2f (patch) | |
tree | c042b23d4ab792a0cd2a13cdac53d198671cbdbd /gcc/tree-vect-transform.c | |
parent | e2b2d33b9da04846e8006b026b567c0da793a7eb (diff) | |
download | gcc-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.c | 17 |
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) |