aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2009-11-25 05:19:05 +0000
committerSebastian Pop <spop@gcc.gnu.org>2009-11-25 05:19:05 +0000
commite8af484268dee77eba449dc151dc7dad718376d8 (patch)
tree76930a3238f5fc37694e789eedd62129d6fad7c8 /gcc
parent3899a0b221ee070c9c80ea5e95067e62ced273d6 (diff)
downloadgcc-e8af484268dee77eba449dc151dc7dad718376d8.zip
gcc-e8af484268dee77eba449dc151dc7dad718376d8.tar.gz
gcc-e8af484268dee77eba449dc151dc7dad718376d8.tar.bz2
sese.c (get_vdef_before_sese): Handle GIMPLE_ASSIGN and GIMPLE_CALL.
2009-10-20 Sebastian Pop <sebastian.pop@amd.com> * sese.c (get_vdef_before_sese): Handle GIMPLE_ASSIGN and GIMPLE_CALL. From-SVN: r154613
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.graphite4
-rw-r--r--gcc/sese.c30
2 files changed, 28 insertions, 6 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 05bd2f1..fe4b203 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,5 +1,9 @@
2009-10-20 Sebastian Pop <sebastian.pop@amd.com>
+ * sese.c (get_vdef_before_sese): Handle GIMPLE_ASSIGN and GIMPLE_CALL.
+
+2009-10-20 Sebastian Pop <sebastian.pop@amd.com>
+
* graphite-sese-to-poly.c (pdr_add_data_dimensions): Do not infer
loop upper bounds for 1-element arrays at end of structures.
* tree-flow.h (array_at_struct_end_p): Declared.
diff --git a/gcc/sese.c b/gcc/sese.c
index 2c38b24..917adbd 100644
--- a/gcc/sese.c
+++ b/gcc/sese.c
@@ -407,8 +407,8 @@ static tree
get_vdef_before_sese (sese region, tree name, sbitmap visited)
{
unsigned i;
- gimple def_stmt = SSA_NAME_DEF_STMT (name);
- basic_block def_bb = gimple_bb (def_stmt);
+ gimple stmt = SSA_NAME_DEF_STMT (name);
+ basic_block def_bb = gimple_bb (stmt);
if (!def_bb || !bb_in_sese_p (def_bb, region))
return name;
@@ -418,18 +418,36 @@ get_vdef_before_sese (sese region, tree name, sbitmap visited)
SET_BIT (visited, def_bb->index);
- switch (gimple_code (def_stmt))
+ switch (gimple_code (stmt))
{
case GIMPLE_PHI:
- for (i = 0; i < gimple_phi_num_args (def_stmt); i++)
+ for (i = 0; i < gimple_phi_num_args (stmt); i++)
{
- tree arg = gimple_phi_arg_def (def_stmt, i);
- tree res = get_vdef_before_sese (region, arg, visited);
+ tree arg = gimple_phi_arg_def (stmt, i);
+ tree res;
+
+ if (gimple_bb (SSA_NAME_DEF_STMT (arg))
+ && def_bb->index == gimple_bb (SSA_NAME_DEF_STMT (arg))->index)
+ continue;
+
+ res = get_vdef_before_sese (region, arg, visited);
if (res)
return res;
}
return NULL_TREE;
+ case GIMPLE_ASSIGN:
+ case GIMPLE_CALL:
+ {
+ use_operand_p use_p = gimple_vuse_op (stmt);
+ tree use = USE_FROM_PTR (use_p);
+
+ if (def_bb->index == gimple_bb (SSA_NAME_DEF_STMT (use))->index)
+ RESET_BIT (visited, def_bb->index);
+
+ return get_vdef_before_sese (region, use, visited);
+ }
+
default:
return NULL_TREE;
}