aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-data-ref.c
diff options
context:
space:
mode:
authorJan Sjodin <jan.sjodin@amd.com>2007-07-31 05:01:12 +0000
committerJan Sjodin <jsjodin@gcc.gnu.org>2007-07-31 05:01:12 +0000
commit06cb4f7988cff376aeafc230dea8e9a8e3e6c0e9 (patch)
treec042b23d4ab792a0cd2a13cdac53d198671cbdbd /gcc/tree-data-ref.c
parenta3f918441efe44c3b32606721a0e4fd35089e2dd (diff)
downloadgcc-06cb4f7988cff376aeafc230dea8e9a8e3e6c0e9.zip
gcc-06cb4f7988cff376aeafc230dea8e9a8e3e6c0e9.tar.gz
gcc-06cb4f7988cff376aeafc230dea8e9a8e3e6c0e9.tar.bz2
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 From-SVN: r127080
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r--gcc/tree-data-ref.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index 85e6d72..94bdaca 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -565,6 +565,27 @@ split_constant_offset (tree exp, tree *var, tree *off)
return;
}
+ case SSA_NAME:
+ {
+ tree def_stmt = SSA_NAME_DEF_STMT (exp);
+ if (TREE_CODE (def_stmt) == GIMPLE_MODIFY_STMT)
+ {
+ tree def_stmt_rhs = GIMPLE_STMT_OPERAND (def_stmt, 1);
+
+ if (!TREE_SIDE_EFFECTS (def_stmt_rhs)
+ && EXPR_P (def_stmt_rhs)
+ && !REFERENCE_CLASS_P (def_stmt_rhs))
+ {
+ split_constant_offset (def_stmt_rhs, &var0, &off0);
+ var0 = fold_convert (type, var0);
+ *var = var0;
+ *off = off0;
+ return;
+ }
+ }
+ break;
+ }
+
default:
break;
}